Как запустить команду командной строки в скрипте Python?


16

Я использую 2 отдельных сценария, Scale1.pyи Scale2.py. Для их запуска я ввожу sudo python Scale1.pyили sudo python Scale2.pyиз командной строки терминала. Я хотел бы иметь строку в Scale2.pyсценарии, в которой, если я нажимаю кнопку, программа прерывается и запускается Scale1.py. Как то так, что не работает.

if GPIO.input(23) == False:
    break(sudo python Scale1.py)

Ответы:


24

os.system("sudo python scale1.py")

сначала вам нужно будет импортировать модуль os

import os

У меня нет атм с моим атм для тестирования, но это приходит от второго ответа на этот вопрос: /programming/89228/calling-an-external-command-in-python


Это то, что я попробовал, и это сработало, спасибо Гарри! Но мне сначала нужно было объединить обе программы. Теперь os.system ("sudo python Scale3.py") просто перезапускается в начале программы Scale3.py, и это нормально. Я думаю, что импорт Scale3.py также будет работать. Я не пробовал подпроцесс, он выглядит интересно и, вероятно, мне нужно чему-то научиться.
Рико

os.system()было исключено в пользу subprocess, см. stackoverflow.com/a/4256153/4212158
crypdick

11

В общем, используйте модуль подпроцесса

subprocess.call(["sudo","python","scale1.py"]) 

для вызовов командной строки.

Пример обработки результата вызова подпроцесса;

 result = subprocess.check_output(['sudo','service','mpd','restart'])

Подпроцесс заменяет несколько старых модулей и функций, таких как os.system и os.spawn . Он хорошо справляется с дезинфекцией аргументов и защищает вас от попадания в оболочку .

https://docs.python.org/2/library/subprocess.html

Конечно, для запуска второго скрипта Python нет необходимости в вызове CLI, вы можете импортировать его.


Я пытаюсь узнать, как выдавать команды из скрипта Python (см. Здесь и здесь ), и возникают некоторые проблемы. Интересно, subprocessможет ли быть лучше и в моем случае?
ух

6

Вы можете использовать sudo, как предложил Гарри Сиб, но вам нужно будет добавить пользователя, запускающего первый скрипт, в файл sudoers .

Лучший способ запустить скрипт Python из другого скрипта Python - это импортировать его. Вы должны иметь логику вашего скрипта в методе во втором скрипте:

# Scale2.py
def run ():
    do_first ()
    do_second ()
    [...]

# Запускайте его только если вызывается из командной строки
если __name__ == '__main__':
    бегать()
# Scale1.py
импорт Scale2

if (GPIO.input (23) == False):
    Scale2.run ()

2
+1, поскольку питон способен на это, это будет cleanestответом.
LuWi

1
+1, это правильный способ сделать то, что хочет ОП, и, вероятно, должен быть принятым ответом.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.