2017-06-30 55 views
0

我有一個python工具調用子進程或任何進程的問題。我的ELF坐在我的電腦上與python代碼所在的文件夾相同。 ELF的工作原理類似於:輸入,輸出,輸入,輸出:40次,我需要將數據發送到程序的輸入。起初,我嘗試用管道:python -c 'print "0 0xdeadbeef hello 5"*40'| ./elf,但精靈瘋了,使我的電腦停止工作。如果你不明白我的意思,那麼現在就試着去理解:精靈等待來自3個選項[0/1/2]的輸入,我選擇0並且比精靈要求我輸入字符串,另一個字符串和一個int。之後,精靈再次返回選項菜單,我需要做40次,,然後我需要發送2精靈所以實際上,我需要這樣的:python -c 'print "0 0xdeadbeef hello 5"*40 +"2"'| ./elf但第一個命令不起作用所以它不能工作。在嘗試'shelling解決方案'後,我試圖使用subprocess庫從我的代碼運行精靈,但它並沒有工作,我試圖溝通函數和寫入標準輸出,但它已被殺死,甚至沒有顯示精靈的任何打印,我甚至不知道我發送的內容是否要輸入。另外,我嘗試了通話功能,因爲沒有人爲我工作。 代碼: import subprocess p=subprocess.Popen(['./elf'],stdin=subprocess.PIPE,stdout=subprocess.PIPE) out = p.communicate(input='0') #not responding 也試過p.stdin.write('0\n'),然後從標準輸出讀取,但始終無人接聽呼籲從Python代碼的ELF

謝謝大家!

回答

0

python -c 'print "0 0xdeadbeef hello 5"*40

目前還不清楚你期望什麼確切的輸出它來產生。

0 0xdeadbeef hello 50 0xdeadbeef hello 50 0xdeadbeef hello 50 0xdeadbeef ... 

這可能不是你的./elf預計或正確處理:你希望像

0 0xdeadbeef hello 5 
0 0xdeadbeef hello 5 
... 

但是,這實際上產生是我想法。

如果你真的想要前者,而不是後者,請嘗試:

python -c 'print "0 0xdeadbeef hello 5\n"*40 +"2"'| ./elf