Python sys.argv - 获取完整的命令行[使用管道或分号]

问题描述 投票:-1回答:1

我想知道是否可以使用管道或分号捕获输入的完整命令行,如下所示:

$> python foo.py arg arg | arg arg

要么

$> python foo.py arg arg; arg arg

今天在我的尝试中,sys.argv只返回管道/分号左侧输入的内容,第二部分作为独立命令运行(可以理解,但不是很理想:))。

我试过这段代码:

if not '\'' in sys.argv or not '"' in sys.argv:
    print 'foo failed'
    exit

强制命令被引用(并且可能强制系统将所有内容看作单个命令行),但是没有工作,第二部分在中断后继续执行。

python argv
1个回答
0
投票

Python无法访问这些部分。这些不是Python的命令参数的一部分,它们是shell的输入。管道,引号和分号是shell语法的一部分,而不是shell启动的子进程的命令行。

shell会分割出你给它的语法,然后只使用寻址到python二进制文件的参数调用Python。您无法从子进程中检索整个shell命令,这可能是一个潜在的安全问题。

如果要将信息传递给Python脚本,则必须在命令参数中执行此操作。这意味着如果必须在参数中包含引号,则必须首先在shell级别转义它们,因此它们不会被解释为shell语法,例如

python foo.py arg1 '|' arg2

然后可以在sys.argv中找到

['foo.py', 'arg1', '|', 'arg2']

其中|周围的单引号告诉shell将该字符视为参数文本。

您需要查阅特定shell环境的文档,以获取有关引用如何工作的详细信息。例如,如果您使用bash,请阅读Bash manual section on quoting

© www.soinside.com 2019 - 2024. All rights reserved.