Vip*_*pul -1 python subprocess python-3.x
我正在Linux中使用python开发一个小型工具。之前我使用的是Python 2.7,但现在将其更改为Python 3.4,以查看它是否可以帮助解决我的问题。当我给出以下代码时:
try:
    x=subprocess.check_output(command, shell=True, timeout=3)
except subprocess.TimeoutExpired as exc:
    print ("Timeout bro")
    exit()
except Exception as e:
    msg = "Some issues in fetching details"
    print (msg)
由于该命令从另一台设备获取详细信息,并且该设备无法正常运行,因此3秒钟后超时,并显示消息“ Timeout bro”。我阅读了使用shell = True的安全性问题,因此使它一次成为shell = False,第二次我删除了该参数。
try:
    x=subprocess.check_output(command, shell=False, timeout=3)
except subprocess.TimeoutExpired as exc:
    print ("Timeout bro")
    exit()
except Exception as e:
    msg = "Some issues in fetching details"
    print (msg)
我在不同的地方都读到该命令在shell = False上同样有效。但是,只要我在代码中运行上述代码,shell=False就无需等待3秒钟即可直接打印“获取详细信息中的某些问题”。有没有办法可以在没有shell = True的情况下运行代码?请帮忙。谢谢!
使用时shell=True,command可能是字符串。使用时shell=False,command应该是一个字符串列表,第一个字符串是可执行文件,随后的字符串是要传递给可执行文件的参数。
您可以尝试使用以下命令拆分命令shlex.split:
import shlex
x = subprocess.check_output(shlex.split(command), shell=False, timeout=3)
默认情况下,当时posix=True,shlex.split会加上反斜杠。因此,如果shlex.split不适用于您的command,则可能需要posix=False手动使用或拆分命令。