我可以将长 bash 命令传递给 asyncio.subprocess.create_subprocess_exec() 吗?
Posted
技术标签:
【中文标题】我可以将长 bash 命令传递给 asyncio.subprocess.create_subprocess_exec() 吗?【英文标题】:Can I pass a long bash command to asyncio.subprocess.create_subprocess_exec()? 【发布时间】:2017-07-14 20:28:40 【问题描述】:马上,有一个类似的问题here,但它并没有完全回答 my 的问题。不过,我在那里留下了评论以防万一。
在asyncio
中有一个asyncio.subprocess.create_subprocess_exec
协程模仿更常见的subprocess.Popen
命令和shell=False
,以防止shell 注入。 Popen
接受 list 字符串,但 create_subprocess_exec
只接受字符串,例如
asyncio.subprocess.create_subprocess_exec('ls', '-lah', 'myfile', stdout=..., stderr=..., stdin=...)
我有一个 bash 命令作为一个大字符串,例如s = 'ls -lah myfile'
。我想将命令传递给create_subprocess_exec
但是像s.split()
这样的列表不起作用! 怎么办?
【问题讨论】:
【参考方案1】:看来asyncio.subprocess.create_subprocess_exec
会接受一个星号列表作为一系列参数,所以解决方案应该是
cmd = ['ls', '-lah', 'myfile']
asyncio.subprocess.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, stdin=asyncio.subprocess.PIPE)
请注意,以这种方式格式化 bash 命令可能很困难,尤其是我正在寻找的rsync
。
【讨论】:
如果参数列表/单个参数太长以至于命令行无法容纳它怎么办?对于这种情况,您有什么建议?以上是关于我可以将长 bash 命令传递给 asyncio.subprocess.create_subprocess_exec() 吗?的主要内容,如果未能解决你的问题,请参考以下文章
将长 Unicode 字符串传递给 FireDac TADQuery 参数
通过回声管道将python变量(字符串)传递给bash命令[重复]