Python sys.argv - 获取完整的命令行[带竖线或分号]

Python sys.argv - Get the full command line [with pipe or semicolon]

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

$> python foo.py arg arg | arg arg

$> python foo.py arg arg ; arg arg

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

我试过代码:

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

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

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