Как вызвать скрипт оболочки из кода python?Как вызвать скрипт оболочки из кода python?
ответ
Модуль subprocess поможет вам.
Грубо тривиальный пример:
>>> import subprocess
>>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
Где test.sh
простой сценарий оболочки и 0
является его возвращаемым значением для этого запуска.
Есть несколько способов, с помощью os.popen()
(устаревшее) или всего subprocess
модуля, но this approach
import sys, os
os.system(command)
является одним из самых легких.
Почему это не самый лучший ответ? Разве не нужно импортировать модуль, лучшее решение? Должен быть какой-то недостаток здесь? –
С помощью 'subprocess' вы можете управлять каналами ввода/вывода/ошибок. Также лучше, когда у вас много аргументов - с 'os.command()' вам нужно будет создать целую командную строку с экранированием специальных символов, а подпроцессом будет простой список аргументов. Но для простых задач 'os.command()' может быть достаточно. –
Процитировать по этой ссылке: 'Модуль подпроцесса предоставляет более мощные средства для нереста новых процессов и получения их результатов; * использование этого модуля предпочтительнее использования этой функции. * ' – Maximilian
Используйте модуль подпроцесса, как указано выше.
Я использую это так:
subprocess.call(["notepad"])
Примечание: вызов подпроцесса со списком является более безопасным, поскольку он не требует передачи (потенциально unsanitized) строки через оболочку для синтаксического анализа/интерпретации. Первым элементом в списке будет исполняемый файл, и все остальные элементы будут переданы в качестве аргументов. –
Subprocess это хорошо, но некоторые люди могут, как scriptine лучше. Scriptine имеет более высокий набор методов, таких как shell.call(args), path.rename(new_name) и path.move(src,dst). Scriptine основан на subprocess и других.
Два недостатки scriptine:
- Текущий уровень документация будет более полным, хотя достаточно.
- В отличие от подпроцесса, пакет скриптинга по умолчанию не установлен.
Пожалуйста, попробуйте следующие коды:
Import Execute
Execute("zbx_control.sh")
В случае, если вы хотите передать некоторые параметры вашего скрипта, вы можете использовать метод 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
import os
import sys
Предполагая test.sh является скрипт, который вы хотите выполнить
os.system("sh test.sh")
модуль подпроцесс хороший модуль для запуска подпроцессов. Вы можете использовать его для вызова команд оболочки, как это:
subprocess.call(["ls","-l"]);
#basic syntax
#subprocess.call(args, *)
Вы можете увидеть документацию here.
Если у вас есть скрипт, написанный на некоторых.sh файл или длинную строку, то вы можете использовать модуль os.system. Это довольно просто и легко назвать:
import os
os.system("your command here")
# or
os.system('sh file.sh')
Эта команда запустит скрипт один раз, до завершения, и блок, пока он не выйдет.
Я запускаю python 3.5 и subprocess.call (['./ test.sh']) не работает для меня.
Я даю вам три решения, зависит от того, что вы хотите делать с выходом.
1 - вызов сценария. Вы увидите вывод в своем терминале. 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 - вызов сценария и сбросить эхо команд 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 subprocess
- 1. вызвать скрипт оболочки из node.js
- 2. Как вызвать скрипт оболочки из python в многопроцессорном режиме?
- 3. Как вызвать скрипт оболочки из php
- 4. Как вызвать скрипт оболочки из программы PLSQL
- 5. Как вызвать скрипт оболочки из сетевой сборки
- 6. Как вызвать скрипт оболочки из JavaScript?
- 7. Как вызвать скрипт оболочки из Python в Windows Powershell?
- 8. Как вызвать скрипт python в новом окне оболочки из кода python?
- 9. Как запустить скрипт python из оболочки
- 10. Как вызвать скрипт оболочки из другого сценария оболочки?
- 11. Как вызвать скрипт java из кода C#?
- 12. Как запустить встроенный скрипт оболочки из python?
- 13. Как выполнить скрипт оболочки из Python?
- 14. Как вызвать скрипт оболочки в кусте
- 15. Вызвать скрипт оболочки в java?
- 16. Как вызвать скрипт оболочки или скрипт python из приложения Atom Atom
- 17. Как вызвать скрипт python из NodeJs
- 18. Как вызвать скрипт python из CasperJS
- 19. Как вызвать скрипт python из iOS
- 20. Как вызвать скрипт Python из «исполняемого» банку?
- 21. Невозможно вызвать Perl-скрипт из Java-кода
- 22. Выполнять скрипт из кода Python
- 23. Как я могу вызвать скрипт оболочки или Perl из iptables?
- 24. Как вызвать скрипт оболочки из php, который требует SUDO?
- 25. Как вызвать скрипт оболочки асинхронно из php/laravel?
- 26. Выполнить скрипт оболочки из python с аргументами
- 27. Как вызвать скрипт python как функцию из bash?
- 28. Как вызвать функцию/переменную скрипта оболочки из python?
- 29. Как выполнить скрипт Python-Fu из оболочки через Gimp
- 30. Как выполнить скрипт оболочки через python
Примечание: это предпочтительнее передать подпроцесс .call(), а не строку (см. команду Hugo24 ниже для примера и причин). –
Ссылка на учебник сломана. –
Это дает: OSError: [Errno 13] Разрешение отклонено. мой скрипт не требуется работать с sudo. @Manoj Govindan – Alper