2016-02-03 297 views
1

我非常新到Python。我使用Python 2.7 我試圖使用自動化在python外殼的命令。我使用Popen運行該命令,並使用Popen.communicate()將參數傳遞給子進程。 我試圖執行的命令基本上是一個Java應用程序,當它執行時,它會查找多個主類。我需要輸入要執行的主類的索引,我使用Popen.communicate()。在輸出畫面,它表明了輸入的數字,但它拋出java.lang.NumberFormatException: For input string: ""Popen.communicate()無法正常工作

爲何需要輸入字符串爲空字符串?

這裏是我使用的代碼:

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() 

這是輸出我得到

[信息]加載項目定義從 /家/ hduser /莫雷/卡夫卡/工程[ 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:對於 輸入字符串:「」了java.lang.RuntimeException:無主類檢測。 在scala.sys.package $ .error(package.scala:27)[跟蹤]堆棧跟蹤抑制:運行最後java的實例/編譯:運行爲全 輸出。 [錯誤](java-examples/compile:run)沒有檢測到主類。 [錯誤]總時間:2秒,完成了2016年2月3日上午05時46分31秒

+0

嘗試發送,而不是〜應變數字,它可能會幫助 print proc.communicate(1)[0] – AlokThakur

+0

@AlokThakur我已經嘗試過,但Popen.communicate()只能接受一個字符串參數。 – aladeen

+0

你有沒有考慮嘗試發送一個換行符作爲你的輸入的一部分? ''1 \ n''也許。 – Amber

回答

2

添加一個換行符你輸入:

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