我试图在远程服务器上运行Python中的bash命令pdfcrack。这是我的密码:
bashCommand = "pdfcrack -f pdf123.pdf > myoutput.txt"
import subprocess
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
但是,我收到以下错误消息:
Non-option argument myoutput2.txt
Error: file > not found
有人能看出我的错误吗?你知道吗
你的错误是
>
在指挥。你知道吗它不会将此视为重定向到文件,因为通常bash会这样做,而现在您不使用bash运行它。你知道吗
如果您想使用bash,请尝试使用
shell=True
。这样就不必将命令拆分为列表。你知道吗>
由shell解释,否则无效。你知道吗所以,这是可行的(不要拆分,按原样使用):
(而且
stdout=subprocess.PIPE
没有用,因为所有输出都被重定向到输出文件)但是使用本机python可以更好地重定向到输出文件并将参数作为列表传递(如果需要,可以处理引号保护)
Popen
的第一个参数是一个包含命令名及其参数的列表。>
不是命令的参数,而是shell语法。您可以简单地将整行传递给Popen
,并指示它使用shell执行它:(请注意,由于您正在将命令的输出重定向到文件,因此没有理由将其标准输出设置为管道,因为将没有任何内容可读取。)
不过,更好的解决方案是让Python处理重定向。你知道吗
另外,不要用
str.split
代替shell的分词。像pdfcrack -f "foo bar.pdf"
这样的有效命令行将被拆分为不正确的列表['pdfcrack', '-f', '"foo', 'bar.pdf"']
,而不是正确的列表['pdfcrack', '-f', 'foo bar.pdf']
。你知道吗相关问题 更多 >
编程相关推荐