Python3.5子进程运行cat命令而不使用shell

时间:2018-03-27 12:57:38

标签: python shell subprocess cat

我正在运行cat命令以使用subprocess.run()读取Linux版本。但是它不起作用,错误是:cat: '/etc/*-release': No such file or directory,由于安全性,我无法使用shell=True。任何提示如何解决这一点是值得赞赏的。 这是我的代码:

try:
    result = subprocess.run(
        shlex.split("cat /etc/*-release"),
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        universal_newlines=True)
except subprocess.TimeoutExpired as err:
    result = err

2 个答案:

答案 0 :(得分:2)

shell的作用是评估*。如果你不使用它,你需要自己做,glob可以帮助你。

所以你可以通过这样做来修复你的例子:

from glob import glob
try:
    result = subprocess.run(
        ["cat"] + glob("/etc/*-release"),
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        universal_newlines=True)
except subprocess.TimeoutExpired as err:
    result = err

答案 1 :(得分:-3)

您可以使用bash命令,以便可以评估*:

process =  subprocess.run(['bash', '-i', '-c',  'cat /etc/*-release'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)