![](/img/trans.png)
[英]Asyncio.create_subprocess_exec NotImplementedError - Fastapi Background Task
[英]Quotes and spaces in an argument to asyncio.create_subprocess_exec() in Windows
我需要從運行在 Windows 上的 asyncio Python 程序調用一個子進程:
process.exe -SomeNormalArg -SomeArgField="Some Value with Spaces"
我目前正在像這樣運行它:
config.json:
{
"args": [
"-SomeNormalArg",
"-SomeArgField=\"Some Value with Spaces\""
]
}
程序.py:
#!/usr/bin/env python3
import asyncio
import json
args = loads(open('config.json').read())['args']
async def main():
await asyncio.create_subprocess_exec('process.exe', *args)
if __name__ == '__main__':
asyncio.run(main())
...但是該進程正在生成為process.exe -SomeNormalArg "-SomeArgField=\"Some Value with Spaces\""
。
我已經閱讀了 Python 文檔中 Windows 位上的將參數序列轉換為字符串,但我想不出一種方法來完成這項工作。
我應該提到帶有完整命令字符串的create_subprocess_shell()
作為一種解決方法,但它是一個混亂的解決方案。
你在過度引用。 -SomeArgField="Some Value with Spaces"
中的引號僅用於防止 shell 通過空格分割參數,將其內容作為單獨的 arguments 傳遞給子進程。 由於您使用的create_subrocess_exec
不是 go 到 shell,因此您一開始就沒有這個問題,也不需要引用:
{
"args": [
"-SomeNormalArg",
"-SomeArgField=Some Value with Spaces"
]
}
如果您習慣於從 shell 啟動程序,這似乎違反直覺,但否則它與您實際想要傳遞給子進程的內容完全匹配。 (子進程不會解析引號,shell 或 C 運行時會這樣做。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.