亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當用 -c 調用蟒蛇時

當用 -c 調用蟒蛇時

米琪卡哇伊 2022-09-13 19:13:36
請考慮以下短的 python (3.8) 代碼段:import subprocessdef call_subprocess_command(*command: str):    with subprocess.Popen(args=command, stdout=subprocess.PIPE, text=True) as process:        for line in iter(process.stdout.readline, ""):            print(line)call_subprocess_command("python", "-c", "import sys; print(sys.argv)", "--test", "foo")這將打印 .我希望它只打印。['-c', '--test', 'foo']['--test', 'foo']我需要這個,因為我正在動態計算要在 docker 容器內運行的命令。但是,調用的代碼的 cli 解析器總是中斷,因為它接收到“-c”參數,它不知道如何處理該參數:call_subprocess_command("python", "-c", "import argparse; parser=argparse.ArgumentParser(); parser.add_argument('test'); print(parser.parse_args())", "--test", "foo")這導致用法被打印到 stderr,并且它將“-c”解析為“test”的值:usage: -c [-h] test-c: error: unrecognized arguments: --test我目前的解決方法是使用僅關鍵字參數(“--test”),但如果可能的話,我真的很想去掉那個“-c”。call_subprocess_command("python", "-c", "import argparse; parser=argparse.ArgumentParser(); parser.add_argument('--test'); print(parser.parse_args())", "--test", "foo")這導致我想要的:Namespace(test='foo')我不太明白為什么這有效,因為它現在似乎忽略了“-c”。如果我添加另一個它不知道的參數,例如“--bar”,它會再次崩潰,即使“-c”也是一個它不知道的參數:call_subprocess_command("python", "-c", "import argparse; parser=argparse.ArgumentParser(); parser.add_argument('--test'); print(parser.parse_args())", "--test", "foo", "--bar")usage: -c [-h] [--test TEST]-c: error: unrecognized arguments: --bar所以我的問題是:如何擺脫子進程中存在的“-c”參數?sys.argv為什么阿格帕西有時可以忽略“-c”,有時不能?
查看完整描述

1 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

如注釋中所述,用作 和 解析 。argparsesys.argv[0]progsys.argv[1:]


如果我指定參數,然后替換默認的“-c”,這可能會更清晰:prog


1119:~/mypy$ python3 -c 'import argparse; p=argparse.ArgumentParser(prog="PROG");print(p.parse_args())' --test foobar

usage: PROG [-h]

PROG: error: unrecognized arguments: --test foobar

在正常腳本用法中, 是腳本的名稱。這里的“腳本名稱”是“-c”。sys.argv[0]


使用與 以下各項相呼應的腳本:sys.argv


1119:~/mypy$ python3 echo.py --test foobar

['echo.py', '--test', 'foobar']


查看完整回答
反對 回復 2022-09-13
  • 1 回答
  • 0 關注
  • 93 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號