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

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

在 python 中運行選項中帶有空格的子進程

在 python 中運行選項中帶有空格的子進程

慕蓋茨4494581 2023-08-15 16:49:34
我嘗試尋找答案一段時間,但到目前為止我還沒有找到適合我的具體情況的任何內容。我想在 python 中運行命令:ssh -o ConnectTimeout=3 -o ProxyCommand="ssh -q -W %h:%p bastion.host.com" host.com  "screen -dmS TEST /bin/bash --login -c 'yes | script.sh --option-1 value1 -option2 value2 2>&1 | tee output.log'"這是我的代碼:import subprocessserver_command = "screen -dmS TEST /bin/bash --login -c 'yes | script.sh --option-1 value1 -option2 value2 2>&1 | tee output.log'"command = ['ssh', '-o', 'ConnectTimeout=3', 'ProxyCommand="ssh -q -W %h:%p bastion.host.com"', 'host.com', server_command]    p = subprocess.Popen(command, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)stdout, stderr = p.communicate(input=None)一切正常(屏幕在腳本運行時生成),直到我添加帶有空格的選項:ProxyCommand="ssh -q -W %h:%p bastion.host.com"。之后我收到錯誤:>>> print(stderr)b'ssh: Could not resolve hostname ProxyCommand="ssh -q -W %h:%p bastion.host.com": Name or service not known\r\n'我怎樣才能將此選項傳遞給我的命令?
查看完整描述

1 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

您的 SSH 命令包含無效參數:ProxyCommand是一個選項,因此需要在它前面加上-o,與ConnectTimeout(并且,正如 Charles Duffy 所指出的,需要刪除該選項字符串內的冗余引號,因為該命令不會傳遞給殼):


server_command = 'screen -dmS TEST /bin/bash --login -c \'yes | script.sh --option-1 value1 -option2 value2 2>&1 | tee output.log\''

command = ['ssh', '-o', 'ConnectTimeout=3', '-o', 'ProxyCommand=ssh -q -W %h:%p bastion.host.com', 'host.com', server_command]

一般來說,當您的命令行包含空格和/或引號并傳遞給另一個命令時,可能需要對它進行 shell 引用。Python 函數shlex.quote可以自動執行此操作。screen在您的情況下,這是沒有必要的,因為您(正確地)手動引用了您傳遞給inside 的命令server_command?;蛘撸部梢跃帉懸韵聝热荩?/p>


script_command = 'yes | script.sh --option-1 value1 -option2 value2 2>&1 | tee output.log'

server_command = f'screen -dmS TEST /bin/bash --login -c {shlex.quote(script_command)}'

— 請注意 shell 命令行內沒有手動引號。相對于手動引用的優點是,這也適用于 shell 引用的嵌套級別,例如,當嵌套命令調用時。


查看完整回答
反對 回復 2023-08-15
  • 1 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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