【发布时间】:2016-05-12 05:01:31
【问题描述】:
我对 Python 还是很陌生。我正在使用Python 2.7
我正在尝试使用 python 在 shell 中自动执行命令。我使用 Popen 运行命令,并使用 Popen.communicate() 将参数传递给子进程。
我试图执行的命令基本上是一个 Java 应用程序,当它执行时,它会找到多个主类。我需要输入要执行的主类的索引,为此我使用Popen.communicate()。在输出屏幕中,它显示输入了数字,但它抛出了java.lang.NumberFormatException: For input string: ""
为什么要把输入字符串当作空字符串?
这是我使用的代码:
import sys
from subprocess import Popen, PIPE, STDOUT
cmd = ["sudo", "./sbt", "project java-examples", "run"]
proc = Popen(cmd, shell=False,stdout=PIPE, stdin=PIPE, stderr=STDOUT)
print proc.communicate('1')[0]
proc.stdin.close()
这是我得到的输出
[info] 加载项目定义 /home/hduser/morey/kafka/project [info] 将当前项目设置为 Kafka (在构建文件中:/home/hduser/morey/kafka/) [info] 设置当前项目 到 kafka-java-examples(在构建文件中:/home/hduser/morey/kafka/)
检测到多个主类,选择一个运行:
[1] 测试生产者
[2] kafka.examples.SimpleConsumerDemo
[3] kafka.examples.KafkaConsumerProducerDemo输入数字:1
无效数字:java.lang.NumberFormatException:对于 输入字符串:“” java.lang.RuntimeException:未检测到主类。 在 scala.sys.package$.error(package.scala:27) [trace] 堆栈跟踪被抑制:运行最后一个 java-examples/compile:run for the full 输出。 [错误] (java-examples/compile:run) 未检测到主类。 [错误] 总时间:2 s,2016 年 2 月 3 日 5:46:31 AM 完成
【问题讨论】:
-
尝试发送数字而不是字符串,它可能有助于打印 proc.communicate(1)[0]
-
@AlokThakur 我试过了,但是 Popen.communicate() 只能接受一个字符串参数。
-
您是否考虑过尝试发送换行符作为输入的一部分?
'1\n'或许。 -
@Amber 谢谢!!!!那完成了工作。 :D
标签: java python python-2.7 shell popen