如何在 Python 中运行测试命令并且没有异常



如果我运行这个

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 调用方代码应更改。它应返回01,具体取决于手册中所述的目录是否存在。

您的问题可能是 Python 找不到test -d a而不是test失败,subprocess.call识别错误并提出看似合适的OSError异常。请参阅subprocess.call/Popen文档的例外区域。正确的称呼方式是subprocess.call(['test', '-d', 'a'])

最新更新