我想在Linux上启动和停止Python3中的外部程序。
这个程序是一个名为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
,但无法弄明白
有什么建议吗?
编辑:
Made Smip-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'
答案 0 :(得分: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