【问题标题】:Popen.communicate() not working properly [duplicate]Popen.communicate() 无法正常工作[重复]
【发布时间】: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


【解决方案1】:

在您的输入中添加换行符:

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

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 2015-09-06
    • 2016-05-06
    • 2018-07-19
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多