【问题标题】:Can I pass a long bash command to asyncio.subprocess.create_subprocess_exec()?我可以将长 bash 命令传递给 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() 这样的列表不起作用! 怎么办?

【问题讨论】:

    标签: python-3.x subprocess python-asyncio


    【解决方案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

    【讨论】:

    • 如果参数列表/单个参数太长以至于命令行无法容纳它怎么办?对于这种情况,您有什么建议?
    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多