当这个.exe文件运行时,它会打印一个充满信息的屏幕,我想在屏幕上打印一条特定的行,这里就是“6”行:
cmd = ' -a ' + str(a) + ' -b ' + str(b) + str(Output)
process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE)
outputstring = process.communicate()[0]
outputlist = outputstring.splitlines()
Output = outputlist[5]
print cmd
这很好用:
cmd = ' -a ' + str(a) + ' -b ' + str(b)
这不起作用:
cmd = ' -a ' + str(a) + ' -b ' + str(b) + str(Output)
我收到错误消息,指出Output
未定义。但是当我剪切和粘贴时:
outputstring = process.communicate()[0]
outputlist = outputstring.splitlines()
Output = outputlist[5]
在cmd语句之前它告诉我进程没有定义。 {。}}应该是.exe运行时在第6行打印的内容。
答案 0 :(得分:5)
您尝试将呼叫结果附加到呼叫本身。您必须在没有+ str(Output)
部分的情况下运行命令一次以获得输出。
以这种方式思考。假设我在一起添加一些数字。
z = 5 + b
b = z + 2
我必须在语句之前定义z
或b
,具体取决于两个语句的顺序。在我知道它是什么之前我不能使用变量。在定义它之前,使用Output
变量执行相同的操作。
答案 1 :(得分:1)
它不应该是一种“舞蹈”来移动东西。这是“=”左侧的问题。如果它在左侧,它就会被创建;如果它在右侧则被使用。
实际上,你的例子甚至无法工作,因为第一行想要输出的一部分,直到最后才创建。
理解这一点的最简单方法是向后工作。你想看到最终的结果吗?
print output[5]
右?所以要到达那里,你必须从一个更大的字符串得到它,对吗?
output= outputstring.splitlines()
print output[5]
那么outputstring
来自哪里?它来自某个子流程。
outputstring = process.communicate()[0]
output= outputstring.splitlines()
print output[5]
那么流程来自哪里?它是由子进程Popen
创建的process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE)
outputstring = process.communicate()[0]
output= outputstring.splitlines()
print output[5]
那么cmd来自哪里?我说不出来。您的示例对正在执行的命令没有意义。
cmd = ?
process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE)
outputstring = process.communicate()[0]
output= outputstring.splitlines()
print output[5]
答案 2 :(得分:1)
只需将第一行更改为:
cmd =' - a'+ str(a)+' - b'+ str(b)
和最后的print语句:
print cmd + str(输出)
这不知道你想要打印的确切内容...... 看起来好像你的问题是在你真正定义Output变量之前尝试使用Output(如上面的帖子所示)
答案 3 :(得分:0)
就像你说的那样,必须在使用之前声明变量。因此,当您致电str(Output)
ABOVE Output = outputlist[5]
时,输出尚不存在。您首先需要实际呼叫:
cmd = ' -a ' + str(a) + ' -b ' + str(b)
然后您可以打印该命令的输出:
cmd_return = ' -a ' + str(a) + ' -b ' + str(b) + str(Output)
应该是print cmd_return
正上方的行。