![](/img/trans.png)
[英]Piping to head results in broken pipe in shell script called from python
[英]Piping to a python script from cmd shell
我有一個 python 腳本(不是我創建的),我們稱之為 myscript,我用幾個參數調用它。 所以我在 Windows cmd 中運行這樣的腳本: 代碼:
/wherever/myscript --username=whoever /some/other/path/parameter
然后出現提示,我可以將 arguments 傳遞給 python 腳本:
Process started successfully, blabla
Python 2.7.2 blabla
(LoggingConsole)
>>>
我寫了我的東西,然后退出回到 cmd:
>>> command1()
>>> command2()
>>> quit()
我懷疑這部分發生了一些錯誤,但一百次試驗只有一次。 所以我想通過一個腳本來做。 我想 pipe 到這個腳本內部 command1 command2,這樣我就可以測試這個 function 千次,看看它什么時候壞了。 我有以下代碼:
echo 'command1()' | py -i /wherever/myscript --username=whoever /some/other/path/parameter
不幸的是,這不會產生相同的行為,就像手動輸入一樣。 我可以通過管道/重定向 output 來模擬這種行為嗎? 為什么它不起作用? 我希望腳本等待命令時會輸入“command1()”文本,但似乎我錯了。
謝謝!
編輯 2021 年 2 月 16 日下午 3:33:
echo 'command1()' | py -i /wherever/myscript --username=whoever /some/other/path/parameter
幾乎是正確的,只需刪除'':
echo command1() | py -i /wherever/myscript --username=whoever /some/other/path/parameter
我的問題來自 myscript。 一旦我修復了這一側的奇怪東西,這部分就一切正常了。 您甚至可以將所有命令放在一起:
echo command1();command2();quit(); | py -i /wherever/myscript --username=whoever /some/other/path/parameter
這個問題改編自gplayersv the 23/08/2012 on unix.com 上的一個問題,但最初的目的使這個問題沒有得到回答。
容易有管道。 如果要獲取標准輸入:
import sys
imput = sys.stdin.read()
print(f'the standard imput was\n{imput}')
sys.stderr.write('This is an error message that will be ignored by piping')
如果您想使用標准輸入作為參數: echo param | xargs myprogram.py
echo param | xargs myprogram.py
Python 的內置fileinput
模塊使這個簡單明了:
#!/usr/bin/env python3
import fileinput
with fileinput.input() as f:
for line in f:
print(line, end='')
你可以接受任何對你來說更容易的機制的輸入:
$ ls | ./filein.py
$ ./filein.py /etc/passwd
$ ./filein.py < $(uname -r)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.