Ase*_*ore 15 shell command-line
这是一个简单的Python应用程序,只需打印传入的命令行参数:
import sys
if __name__ == "__main__":
print "Arguments:"
for i in range(len(sys.argv)):
print "[%s] = %s" % (i, sys.argv[i])
Run Code Online (Sandbox Code Playgroud)
以下是一些示例运行:
python args.py hello world
Arguments:
[0] = args.py
[1] = hello
[2] = world
python args.py "hello world"
Arguments:
[0] = args.py
[1] = hello world
python args.py "hello\world"
Arguments:
[0] = args.py
[1] = hello\world
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是现在当我用反斜杠结束任何争论时,Python就会扼杀它:
python args.py "hello\world\"
Arguments:
[0] = args.py
[1] = hello\world"
python args.py "hello\" world "any cpu"
Arguments:
[0] = args.py
[1] = hello" world any
[2] = cpu
Run Code Online (Sandbox Code Playgroud)
我意识到通过"R"字头(Python的低于理想原始字符串行为链接),它似乎很清楚,它在这里采用相同的行为.
但在这种情况下,我无法控制传递给我的参数,并且我不能强制执行参数不以反斜杠结尾.我如何解决这个令人沮丧的限制?
-
编辑:感谢那些指出这种行为不是特定于Python的人.它似乎是标准的shell行为(至少在Windows上,我目前没有Mac).
更新的问题:我如何接受以反斜杠结尾的args?例如,我的应用程序的一个参数是文件路径.我无法强制执行客户端发送给我,没有反斜杠,或反斜杠转义.这有可能吗?
mip*_*adi 12
这可能是shell \作为转义字符处理,从而逃避角色.所以shell发送\"为"(因为它认为你试图逃避双引号).解决方案是逃避转义字符,如下所示:$ python args.py "hello\world\\".
末尾的反斜杠被解释为转义序列的开始,在本例中是一个文字双引号字符.我在处理包含路径的环境参数时遇到了类似的问题,该路径有时以\结尾,有时没有.
我想出的解决方案是在调用可执行文件时始终在路径字符串的末尾插入一个空格.然后我的可执行文件使用带有斜杠的目录路径和末尾的空格,这将被忽略.如果导致问题,您可以修改程序中的路径.
如果%SlashPath%="hello"
python args.py "%SlashPath% " world "any cpu"
Arguments:
[0] = args.py
[1] = hello\
[2] = world
[3] = any cpu
Run Code Online (Sandbox Code Playgroud)
如果%SlashPath%="hello"
python args.py "%SlashPath% " world "any cpu"
Arguments:
[0] = args.py
[1] = hello
[2] = world
[3] = any cpu
Run Code Online (Sandbox Code Playgroud)
希望这会给你一些如何解决问题的想法.
小智 6
Microsoft参数分析规则
这些是解析由CreateProcess()传递给用C/C++编写的程序的命令行的规则:
有关详细和清晰的说明,请参阅http://www.daviddeley.com/autohotkey/parameters/parameters.htm#WINCRULESDOC
| 归档时间: |
|
| 查看次数: |
8329 次 |
| 最近记录: |