首页 > 解决方案 > subprocess.run 导致空间解释为 arg?

问题描述

我正在编写一个非常简单的测试套件,当我调用 时subprocess.run(["./name-of-binary", args], capture_output=True, shell=True),它会存储命令的输出。当我用 调用它时args = "",它似乎将一个空格传递给二进制文件。当我使用实际空间运行二进制文件时,一切正常。这是怎么回事?谢谢!

标签: pythontestingsubprocess

解决方案


可能的解决方案(推荐):

if args:
    subprocess.run(["./name-of-binary"],  capture_output=True)
else:
    subprocess.run(["./name-of-binary", args],  capture_output=True)

或者:

subprocess.run("".join(["./name-of-binary", args]),  capture_output=True, shell=True) # this maybe will cause shell injection.

我认为原因是执行此命令时,subprocess会在这些元素之间自动添加空格。所以直接的方法是直接传递字符串。


推荐阅读