簡體   English   中英

從 cmd shell 管道到 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:

  1. 我正在尋找解決此問題的 cmd shell 方法,沒有 python 的東西
  2. 劇本
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM