在 python 中使用子进程时找不到文件错误
File not found error using subprocess in python
我在 ubuntu 18.04LTS 安装上使用 python 3.6.9,并尝试使用子进程库调用已编译的 C++ 函数。该函数不带参数,所以我认为这应该有效:
subprocess.Popen(["ais"], stdout=subprocess.PIPE)
但是这样做returns
>>> Popen(["ais"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'ais': 'ais'
考虑到从同一目录 returns:
调用 os.listdir()
,这让我有点困惑
>>> print(os.listdir())
['COM6 ARPA_A.txt', 'dataStream.py', 'arpa.cpp', 'arpa', 'COM7 AIS.txt', 'ais.cpp', 'ais']
要执行文件,您必须使用“./filename”
通过阅读您上面的评论,您必须授予文件可执行权限,可以这样做:
chmod +x ais
这里很好地解释了原因:https://unix.stackexchange.com/a/4432/399463
我在 ubuntu 18.04LTS 安装上使用 python 3.6.9,并尝试使用子进程库调用已编译的 C++ 函数。该函数不带参数,所以我认为这应该有效:
subprocess.Popen(["ais"], stdout=subprocess.PIPE)
但是这样做returns
>>> Popen(["ais"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'ais': 'ais'
考虑到从同一目录 returns:
调用os.listdir()
,这让我有点困惑
>>> print(os.listdir())
['COM6 ARPA_A.txt', 'dataStream.py', 'arpa.cpp', 'arpa', 'COM7 AIS.txt', 'ais.cpp', 'ais']
要执行文件,您必须使用“./filename”
通过阅读您上面的评论,您必须授予文件可执行权限,可以这样做:
chmod +x ais
这里很好地解释了原因:https://unix.stackexchange.com/a/4432/399463