首页 > 解决方案 > Python sys.argv - 获取完整的命令行 [使用管道或分号]

问题描述

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

$> python foo.py arg arg | 参数参数

或者

$> python foo.py arg arg ; 参数参数

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

我试过代码:

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

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

标签: pythonargv

解决方案


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

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

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

python foo.py arg1 '|' arg2

然后可以sys.argv作为

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

其中单引号|告诉外壳程序将该字符视为参数文本。

您需要查阅特定 shell 环境的文档以了解有关引用如何工作的详细信息。例如,如果您使用 bash,请阅读Bash 手册中有关引用的部分。


推荐阅读