如何从python中的参数列表格式化shell命令行

如何从python中的参数列表格式化shell命令行,python,shell,command-line,formatting,command-line-arguments,Python,Shell,Command Line,Formatting,Command Line Arguments,我有一个参数列表,例如,[“你好”、“鲍比·鲍伯”、“再见”]。如何格式化这些文件,以便将它们适当地传递给shell 错误: >>> " ".join(args) hello bobbity bob bye >>> magic(args) hello "bobbity bob" bye 正确: >>> " ".join(args) hello bobbity bob bye >>> magic(args) hello

我有一个参数列表,例如,
[“你好”、“鲍比·鲍伯”、“再见”]
。如何格式化这些文件,以便将它们适当地传递给shell

错误

>>> " ".join(args)
hello bobbity bob bye
>>> magic(args)
hello "bobbity bob" bye
正确

>>> " ".join(args)
hello bobbity bob bye
>>> magic(args)
hello "bobbity bob" bye

老派做法有什么错:

>>> args = ["hello", "bobbity bob", "bye"]
>>> s = ""
>>> for x in args:
...     s += "'" + x + "' "
...
>>> s = s[:-1]
>>> print s
'hello' 'bobbity bob' 'bye'

是否也引用单词参数并不重要。

解决问题的简单方法是在文本中至少有两个词时添加\“…\”。
为此:

# Update the list
for str in args:
  if len(str.split(" ")) > 2:
    # Update the element within the list by
    # Adding at the beginning and at the end \"

    ...

# Print args
" ".join(args)

如果实际将值发送到shell脚本,
subprocess.popen
将为您处理此问题:


否则,我相信你是在操纵字符串
shlex.split
的作用与您想要的相反,但似乎没有相反的作用。

您可以使用未记录但长期稳定(至少)的子流程。list2cmdline:

In [26]: import subprocess
In [34]: args=["hello", "bobbity bob", "bye"]

In [36]: subprocess.list2cmdline(args)
Out[36]: 'hello "bobbity bob" bye'

当某些参数可能包含引号
”还是反斜杠<代码>\'s?@TokenMacGuy:是的。。我基本上想知道它将如何通过
popen
传递,但作为命令行,它是完美的。。正是我想要的。我想知道为什么这些参数不适用于documentedWorks,但如果这些参数可能包含单引号,则可能会导致问题(包括安全问题)。这种情况不起作用:list_to_cmdline(['curl',')list_to_cmdline(['quotes','''''\'])list_to_cmdline(['echo',star','*'))