如何运行test命令并在Python中没有异常?

时间:2018-04-17 20:51:08

标签: python python-2.7 subprocess

如果我运行

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调用者代码应该更改。根据目录的存在,它会返回01,如手册中所述。

1 个答案:

答案 0 :(得分:0)

您的问题可能是Python找不到test -d a而不是test失败,subprocess.call识别错误并发起看似合适的OSError异常。请参阅subprocess.call/Popen文档的exceptions区域。调用它的正确方法是subprocess.call(['test', '-d', 'a'])