我是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] TestProducer
[2] kafka.examples.SimpleConsumerDemo
[3] kafka.examples.KafkaConsumerProducerDemo输入数字:1
无效的数字:java.lang.NumberFormatException:For 输入字符串:“”java.lang.RuntimeException:未检测到主类。 在scala.sys.package $ .error(package.scala:27)[trace]堆栈跟踪被抑制:运行最后java-examples / compile:运行完整 输出。 [error](java-examples / compile:run)没有检测到主类。 [错误]总时间:2秒,2016年2月3日5:46:31完成
答案 0 :(得分:2)
在输入中添加换行符:
print proc.communicate('1\n')[0]