我想调用的命令看起来像这样:
mycmd arg1 arg2 arg3< infile.ext>> outfile.ext
其中infile.ext
是文件mycmd
读入以执行其进程,而outfile.ext
类似于日志文件。
我的Python
代码是:
from subprocess import call
impArgs = "%s %s %s < %s >> %s" % (arg1, arg2, arg3, impFilePath, rptFilePath)
impResult = call(["mycmd ", impArgs])
我得到impResult
3,没有错误,但命令没有被调用。我该如何解决这个问题?
答案 0 :(得分:1)
您正在使用shell的重定向功能。默认情况下,Popen
只会启动该过程。它不使用shell,因为在基本情况下根本不需要shell。
使用shell=True
并将整个命令作为字符串传递。
来自子流程导入调用
impArgs = "mycmd %s %s %s < %s >> %s" % (arg1, arg2, arg3, impFilePath, rptFilePath)
impResult = call(impArgs, shell=True)
或使用管道功能shown in docs:
with open(impFilePath) as src, open(rptFilePath) as dst:
call(['mycmd', arg1, arg2. arg3], stdin=src, stdout=dst)
答案 1 :(得分:0)
而不是
impArgs = "%s %s %s < %s >> %s" % (arg1, arg2, arg3, impFilePath, rptFilePath)
impResult = call(["mycmd ", impArgs])
我用过
impCmd = "mycmd %s %s %s < %s >> %s" % (arg1, arg2, arg3, impFilePath, rptFilePath)
impResult = call(impCmd, shell = True)
shell = True
解决了问题,结果代码为0并执行了命令。