python - 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
强制引用命令(并且可能强制系统将所有内容视为单个命令行),但没有工作,第二部分在休息后继续执行。
解决方案
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 手册中有关引用的部分。
推荐阅读
- mongodb - 如何确定mongodb数据文件版本?
- javascript - 使用 javascript 的唯一词计数器
- javascript - Javascript:如何防止重复的键值对被添加到数组中?
- algorithm - 计算与矩阵中另一个单元格具有给定曼哈顿距离的单元格数
- r - 积极和消极的 Wordcloud
- c# - 如果我每次都必须等待而不是使用 Sync .ToList(),那么在使用 .ToListAsync 的各个多数据库查询中是否有任何性能优势?
- sql - SQL Server:在源表上使用联接合并无法绑定
- reactjs - FB API 获取值之外的变量返回未定义
- ajax - 如何使用 ajax 事件和渲染消息通过 @FacesValidator 执行单个输入验证?
- c++ - C++ 操作优先表中的后增量与赋值