2016-11-28 4 views
0

Я хочу запустить и остановить внешнюю программу в 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' 
+2

Вы должны объявить ' smip_tun' global, см. [Использование глобальных переменных в функции, отличной от одной при создании их] (http://stackoverflow.com/q/423379/45249) – mouviciel

+0

@mouviciel Это прекрасный ответ;) – filmor

+0

В частности, добавьте инструкцию 'global smip_tun' в начало' start_smip_tun() 'функция. – martineau

ответ

1
import os 

os.chdir('.') # or change the . for the full path directory. 

smip_tun = subprocess.Popen(['smip_tun',DEFAULT_SERIAL_PORT]) 

Кроме того, убедитесь ваше приложение не имеют никакого расширения, как smip-tun.py и smip-tun.sh

Смежные вопросы