如果我运行这个
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
如何克服这个问题?不允许更改命令文本,Python 调用方代码应更改。它应返回0
或1
,具体取决于手册中所述的目录是否存在。
您的问题可能是 Python 找不到test -d a
而不是test
失败,subprocess.call
识别错误并提出看似合适的OSError
异常。请参阅subprocess.call/Popen
文档的例外区域。正确的称呼方式是subprocess.call(['test', '-d', 'a'])