Я хочу запустить и остановить внешнюю программу в Python3, на Linux. Эта программа является исполняемым, который называется smip-tun,
, расположенный в той же папке, что и исходный код, и я хотел бы иметь возможность выполнять и контролировать его там с относительными именами.Запуск и остановка внешней программы?
К сожалению, это не работает:
smip_tun = 0
def start_smip_tun(self):
smip_tun = subprocess.Popen(['smip-tun',DEFAULT_SERIAL_PORT])
def end_smip_tun(self):
smip_tun.terminate()
print("end")
Но говорит, что не может найти smip-tun
. Усилия по указанию относительного каталога не удались. Я пытался с cwd
, но не могу понять.
Любые советы?
Edit:
Сделано ДПМС-TUN глобальный, но проблема не исчезла.
Новый код: сообщение
smip_tun = 0
def start_smip_tun(self):
global smip_tun
smip_tun = subprocess.Popen(['smip-tun',DEFAULT_SERIAL_PORT])
def end_smip_tun(self):
global smip_tun
smip_tun.terminate()
print("end")
Ошибка:
File "/home/sven/git/cerberos_manager/iot_network_api.py", line 40, in start_smip_tun
smip_tun = subprocess.Popen(['smip-tun',DEFAULT_SERIAL_PORT])
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'smip-tun'
Вы должны объявить ' smip_tun' global, см. [Использование глобальных переменных в функции, отличной от одной при создании их] (http://stackoverflow.com/q/423379/45249) – mouviciel
@mouviciel Это прекрасный ответ;) – filmor
В частности, добавьте инструкцию 'global smip_tun' в начало' start_smip_tun() 'функция. – martineau