Как вызвать скрипт из кода Python?
211
Модуль подпроцесса поможет вам.
Очевидно тривиальный пример:
>>> import subprocess
>>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
Где test.sh
простой сценарий оболочки и 0
его возвращаемое значение для этого прогона.
chmod +x script.sh
. Примечание: script.sh является заполнителем для вашего скрипта, замените его соответствующим образом.Есть несколько способов использования
os.popen()
(не рекомендуется) или всегоsubprocess
модуля, но этот подходявляется одним из самых простых.
источник
subprocess
вы можете управлять вводом / выводом / ошибкой каналов. Также лучше, когда у вас много аргументов -os.command()
вам придется создавать целую командную строку с экранированием специальных символов, сsubprocess
простым списком аргументов. Но для простых задачos.command()
может быть просто достаточно.The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; *using that module is preferable to using this function.*
Если вы хотите передать некоторые параметры в ваш скрипт оболочки, вы можете использовать метод shlex.split () :
с
test.sh
в той же папке:Выходы:
источник
Предполагая, что test.sh является сценарием оболочки, который вы хотите выполнить
источник
Используйте модуль подпроцесса, как указано выше.
Я использую это так:
источник
Я использую Python 3.5 и subprocess.call (['./ test.sh']) не работает для меня.
Я даю вам три решения, зависит от того, что вы хотите сделать с выходом.
1 - скрипт вызова. Вы увидите вывод в вашем терминале. выходной это число.
2 - вызов и сброс дампа и ошибка в строку. Вы не увидите выполнение в своем терминале, если не печатаете (stdout). Shell = True, поскольку аргумент в Popen не работает для меня.
3 - вызвать скрипт и вывести команды echo файла temp.txt в файл temp_file
Не забудьте взглянуть на подпроцесс doc
источник
subprocess.call
. Дочерний процесс блокируется, если он генерирует достаточно данных для канала, чтобы заполнить буфер канала ОС, поскольку каналы не читаются из.Модуль подпроцесса - хороший модуль для запуска подпроцессов. Вы можете использовать его для вызова команд оболочки следующим образом:
Вы можете увидеть его документацию здесь.
Если ваш скрипт написан в каком-то файле .sh или длинной строке, то вы можете использовать модуль os.system. Это довольно просто и легко позвонить:
Эта команда запустит скрипт один раз, до его завершения и заблокирует, пока он не выйдет.
источник
В случае, если скрипт имеет несколько аргументов
Выход выдаст код состояния. Если скрипт выполняется успешно, он даст 0, иначе ненулевое целое число.
Ниже приведен скрипт оболочки test.sh.
источник
Подпроцесс хорош, но некоторым людям может понравиться сценарий лучше. Scriptine имеет более высокоуровневый набор методов, таких как shell.call (args) , path.rename (new_name) и path.move (src, dst) . Скриптин основан на подпроцессе и других.
Два недостатка скриптинга:
источник
Я знаю, что это старый вопрос, но недавно я наткнулся на него, и это привело к тому, что я заблуждался со времен подпроцесса API , как изменились с тех пор питона 3.5.
Новый способ выполнения внешних скриптов - с помощью
run
функции, которая запускает команду, описанную args. Ожидает завершения команды, затем возвращает экземпляр CompletedProcess.источник
Если ваш файл сценария оболочки не имеет разрешений на выполнение, сделайте это следующим образом.
источник
Пожалуйста, попробуйте следующие коды:
источник