以字符串形式获取命令行参数

2024-05-14 15:54:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将所有命令行参数打印为一个字符串。我如何调用脚本以及我希望打印的内容的示例:

./RunT.py mytst.tst -c qwerty.c

mytst.tst -c qwerty.c

这样做的代码:

args = str(sys.argv[1:])
args = args.replace("[","")
args = args.replace("]","")
args = args.replace(",","")
args = args.replace("'","")
print args

我做了所有替换,因为sys.argv[1:]返回:

['mytst.tst', '-c', 'qwerty.c']

有没有更好的方法得到同样的结果?我不喜欢那些多次更换电话


Tags: 字符串命令行py脚本示例内容参数sys
3条回答

前面的任何答案都不能正确地转义所有可能的参数,如空参数或包含引号的参数。使用最少的代码可以得到的最接近的结果是使用shlex.quote(从Python3.3开始提供):

import shlex
cmdline = " ".join(map(shlex.quote, sys.argv[1:]))

编辑

以下是与Python2+3兼容的解决方案:

import sys

try:
    from shlex import quote as cmd_quote
except ImportError:
    from pipes import quote as cmd_quote

cmdline = " ".join(map(cmd_quote, sys.argv[1:]))

一种选择:

import sys
' '.join(sys.argv[1:])

join()函数通过调用任何字符串来连接其参数。所以' '.join(...)用它们之间的单个空格(' ')连接参数。

命令行参数在发送到sys.argv之前已由shell处理。因此,shell引用和空白都消失了,无法完全重建。

假设用户使用带空格的双引号字符串,这里有一个python程序用这些引号重建命令字符串。

commandstring = '';  

for arg in sys.argv[1:]:          # skip sys.argv[0] since the question didn't ask for it
    if ' ' in arg:
        commandstring+= '"{}"  '.format(arg) ;   # Put the quotes back in
    else:
        commandstring+="{}  ".format(arg) ;      # Assume no space => no quotes

print(commandstring); 

例如,命令行

./saferm.py sdkf lsadkf -r sdf -f sdf -fs -s "flksjfksdkfj sdfsdaflkasdf"

将生成与输出相同的参数:

sdkf lsadkf -r sdf -f sdf -fs -s "flksjfksdkfj sdfsdaflkasdf"

因为用户实际上只使用带字符串的双引号参数。

相关问题 更多 >

    热门问题