Как вызвать скрипт из кода Python?
Как вызвать оболочку script из кода python?
Ответ 1
Модуль subprocess поможет вам.
Наглядно тривиальный пример:
>>> import subprocess
>>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
Где test.sh
- простая оболочка script, а 0
- ее возвращаемое значение для этого прогона.
Ответ 2
Есть несколько способов использования os.popen()
(не рекомендуется) или всего модуля subprocess
, но этот подход
import os
os.system(command)
является одним из самых простых.
Ответ 3
Если вы хотите передать некоторые параметры своей оболочке script, вы можете использовать метод shlex.split():
import subprocess
import shlex
subprocess.call(shlex.split('./test.sh param1 param2'))
с test.sh
в той же папке:
#!/bin/sh
echo $1
echo $2
exit 0
Выходы:
$ python test.py
param1
param2
Ответ 4
import os
import sys
Предполагая, что test.sh - это оболочка script, которую вы хотели бы выполнить
os.system("sh test.sh")
Ответ 5
Используйте модуль подпроцесса, как указано выше.
Я использую его следующим образом:
subprocess.call(["notepad"])
Ответ 6
Я запускаю python 3.5 и subprocess.call(['./test.sh']) не работает для меня.
Я даю вам три решения, зависит от того, что вы хотите сделать с выходом.
1 - вызов script. Вы увидите вывод в своем терминале. output - это число.
import subprocess
output = subprocess.call(['test.sh'])
2 - выполнение вызова и дампа и ошибка в строке. Вы не видите выполнение в своем терминале, если не печатаете (stdout). Shell = True, поскольку аргумент в Popen не работает для меня.
import subprocess
from subprocess import Popen, PIPE
session = subprocess.Popen(['test.sh'], stdout=PIPE, stderr=PIPE)
stdout, stderr = session.communicate()
if stderr:
raise Exception("Error "+str(stderr))
3 - вызовите script и выгрузите команды эха temp.txt в temp_file
import subprocess
temp_file = open("temp.txt",'w')
subprocess.call([executable], stdout=temp_file)
with open("temp.txt",'r') as file:
output = file.read()
print(output)
Не забудьте взглянуть на подпроцесс doc
Ответ 7
В случае, если скрипт имеет несколько аргументов
#!/usr/bin/python
import subprocess
output = subprocess.call(["./test.sh","xyz","1234"])
print output
Выход выдаст код состояния. Если скрипт выполняется успешно, он даст 0, иначе ненулевое целое число.
podname=xyz serial=1234
0
Ниже приведен скрипт оболочки test.sh.
#!/bin/bash
podname=$1
serial=$2
echo "podname=$podname serial=$serial"
Ответ 8
Модуль подпроцесса является хорошим модулем для запуска подпроцессов. Вы можете использовать его для вызова команд оболочки следующим образом:
subprocess.call(["ls","-l"]);
#basic syntax
#subprocess.call(args, *)
Вы можете увидеть его документацию здесь.
Если у вас есть script, записанный в каком-либо файле .sh или длинной строке, вы можете использовать модуль os.system. Это довольно просто и легко вызвать:
import os
os.system("your command here")
# or
os.system('sh file.sh')
Эта команда будет запускать script один раз, до завершения и блокировать, пока не выйдет.
Ответ 9
Подпроцесс хорош, но некоторым людям может понравиться scriptine лучше. Scriptine имеет более высокий набор методов, таких как shell.call(args), path.rename(new_name) и path.move(src, dst). Scriptine основан на subprocess и других.
Два недостатка сценария:
- Текущий уровень документации будет более всеобъемлющим, даже если он достаточен.
- В отличие от подпроцесса, пакет scriptine по умолчанию не установлен.
Ответ 10
Я знаю, что это старый вопрос, но я наткнулся на это в последнее время, и это в конечном итоге дезинформирует меня с подпроцессом API, как изменились с тех пор питона 3.5.
Новый способ выполнения внешних скриптов - с помощью функции run
.
Import subprocess
subprocess.run(['./test.sh'])
Ответ 11
Пожалуйста, используйте следующие коды:
Import Execute
Execute("zbx_control.sh")