Popen.communicate()无法正常工作

时间:2016-02-03 06:01:45

标签: java python python-2.7 shell popen

我是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完成

1 个答案:

答案 0 :(得分:2)

在输入中添加换行符:

print proc.communicate('1\n')[0]