问题 使用空格处理目录Python subprocess.call()


我正在尝试创建一个扫描文本文件并将参数传递给子进程的程序。一切正常,直到我得到路径中有空格的目录。

我的分裂方法,打破了争论的空间:

s = "svn move folder/hello\ world anotherfolder/hello\ world"

task = s.split(" ")
process = subprocess.check_call(task, shell = False)

要么,我需要函数来解析正确的参数,或者我将整个字符串传递给子进程而不先将其分解。

我虽然有点失落。


6110
2017-08-07 12:40


起源

你能依靠固定数量的以空格分隔的左令牌吗? - Silas Ray
引用文件名怎么样? - Andreas Jung
如果您创建正在读取的文件名,为什么不将值分隔为逗号?然后拆分“,”而不是所有的麻烦? - Inbar Rose


答案:


改为使用列表:

task = ["svn",  "move",  "folder/hello world", "anotherfolder/hello world"]
subprocess.check_call(task)

如果您的文件包含整个命令,而不仅仅是路径,那么您可以尝试 shlex.split()

task = shlex.split(s)
subprocess.check_call(task)

14
2017-08-07 12:44



+1为 shlex。 - RanRag
谢谢谢谢!使用列表可以解决各种奇怪的引用/转义问题+1 - Brian