我正在使用一个只在bash中运行的科学软件(称为vasp),并使用Python创建一个可以为我多次运行的脚本。当我使用subprocess.check_调用要正常调用该函数,它可以正常工作,但当我添加'| tee_output'时,它就不起作用了。在
subprocess.check_call('vasp') #this works
subprocess.check_call('vasp | tee tee_output') #this doesn't
我对python和编程都很在行。在
Tags:
你可以这样做:
这通常比使用
shell=True
更安全,尤其是当您不能信任输入时。在注意,},以确定它是否应该引发一个
check_call
将检查tee
的返回码,而不是{CalledProcessError
。(shell=True
方法将执行相同的操作,因为这与shell管道的行为相匹配。)如果需要,可以通过调用vasp.poll()
自己检查vasp
的返回代码。(另一种方法不允许您这样做。)试试这个。它通过shell执行命令(作为字符串传递),而不是直接执行命令。(这相当于用
-c
标志调用shell本身,即Popen(['/bin/sh', '-c', args[0], args[1], ...])
):但请注意docs中有关此方法的警告。在
不要使用shell=True,它有很多安全漏洞。不如这样做
我知道它比较长,但安全得多。在
相关问题 更多 >
编程相关推荐