【发布时间】:2018-04-29 07:32:52
【问题描述】:
这是一个错误吗?
#!/usr/bin/env python3.6
# filename: tmp.py
import sys
print(sys.argv)
调用:
python tmp.py find . -name '*.py'
实际输出:
['tmp.py', 'find', '.', '-name', '*.py']
预期输出:
['tmp.py', 'find', '.', '-name', "'*.py'"]
请注意实际输出中缺少引号。
【问题讨论】:
-
你为什么期待文字引号?
-
我为什么不应该呢?我没有要求 python 做任何事情,只是在命令行中提取 实际 的内容。
-
...也就是说,如果您调用
subprocess.Popen(['foo', 'hello']),您不会(嗯,不应该)期望foo看到文字参数hello周围的Python 引号.同样,您不能指望其他程序看到纯粹是 shell 语法的引号,而不是传递给正在执行的软件。 -
@BrianBruggeman 它准确地提取了您在命令行中输入的内容...您的误解是围绕
bash的工作原理以及字面引号对bash的含义...也值得尝试@987654330 @ -
...所以,当您谈论“命令行”时——这是一个 shell 结构。当一个 UNIX 程序启动另一个 UNIX 程序时,实际调用约定是一个 C 字符串数组。
标签: python shell command-line-arguments