簡體   English   中英

Argparse可選的stdin讀取和/或stdout輸出

[英]Argparse optional stdin read and/or stdout out

非Python程序將同時使用輸入和輸出參數來調用Python程序。 輸入可以是文件引用,也可以是在非Python程序中重定向到stdin的字符串。 輸出可能是文件或標准輸出。

argparse.FileType似乎已准備好處理此問題,因為它已經具有特殊功能-可以直接指向stdin / stdout。 實際上,使用-定向到stdout可以,但是我不知道stdin的實現/語法。

非Python代碼中的示例調用:
python mycode.py - output.txt
python mycode.py - -

之后,非Python代碼會做什么? 打印/輸出一個輸入字符串?
之后,Python代碼做什么?

我將始終需要區分兩個arg的default=sys.stdin (即輸入和輸出),因此在add_argument使用default="-"default=sys.stdin add_argument都不起作用,因為它們需要一個不存在的參數。

這是我到目前為止的內容:

parser = argparse.ArgumentParser()

parser.add_argument('read_fref', type=argparse.FileType('r'))
parser.add_argument('write_fref', type=argparse.FileType('w'))
parser_ns = parser.parse_args()

with parser_ns.read_fref as f_r:
    read_f = json.load(f_r)    

output = {'k': 'v'}

with parser_ns.write_fref as f_w:
    json.dump(output, f_w)

我無法理解您的要求。 我了解Python和argparse在做什么,但是我不太了解您正在嘗試做什么。

從Linux shell調用時,您的示例看起來運行良好。 使用-參數,它應該接受來自鍵盤的輸入,並將其顯示在屏幕上。 但是這些參數最常與shell重定向控件>, <, | (具體細節取決於shell, shbash等)。

但是,如果您使用外殼將stdinstdout重定向到文件或從文件重定向,則可以將這些文件作為命令行參數來使用。

如果您被必需/默認問題所困擾,請考慮將這些參數標記為(也稱為optionals ):

parser.add_argument('-r','--readfile', type=argparse.FileType('r'), default='-')
parser.add_argument('-w','--writefile', type=argparse.FileType('w'), default='-')

進行此更改后,這些調用是相同的

python mycode.py -r - <test.json
python mycode.py <test.json
python mycode.py -r test.json

全部寫入屏幕(stdout)。 可以通過類似的方式重定向。

要輸入輸入內容:

python mycode.py
{...}
^D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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