如果我运行
test -d a
在Linux命令行中,它不返回任何内容,即使目录a
不存在也不会输出错误,因为结果是通过退出代码返回的。
但如果我想用Python获取这个退出代码,我会得到
import subprocess
subprocess.call('test -d a')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/opt/anaconda3/envs/python27/lib/python2.7/subprocess.py", line 168, in call
return Popen(*popenargs, **kwargs).wait()
File "/opt/anaconda3/envs/python27/lib/python2.7/subprocess.py", line 390, in __init__
errread, errwrite)
File "/opt/anaconda3/envs/python27/lib/python2.7/subprocess.py", line 1025, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
如何克服这个?不允许更改命令文本,anly python调用者代码应该更改。根据目录的存在,它会返回0
或1
,如手册中所述。
答案 0 :(得分:0)
您的问题可能是Python找不到test -d a
而不是test
失败,subprocess.call
识别错误并发起看似合适的OSError
异常。请参阅subprocess.call/Popen
文档的exceptions区域。调用它的正确方法是subprocess.call(['test', '-d', 'a'])