问题标签 [shlex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 驯服 shlex.split() 行为
SO上还有其他问题接近回答我的问题,但我有一个非常具体的用例,我无法解决。考虑一下:
这会引起麻烦,因为program.exe
使用以下参数调用:
也就是说,双反斜杠不再存在,因为它被shlex.split()
删除了。当然,我可以改为(如其他答案所示)这样做:
但是 thenprogram.exe
被这些参数有效地调用:
这也不好,因为现在双引号已经成为第一个参数内容的一部分,它们不属于它们,即使第二个参数现在很好。第三个参数已经变得一团糟。
用正斜杠替换反斜杠,或用正则表达式删除引号都不起作用,原因类似。
有没有办法shlex.split()
在服务器名称之前留下双反斜杠?还是根本没有?为什么它首先删除它们?
请注意,它们本身是完全有效的命令(无论如何分别在 Windows 和 Linux 上):
即使我确实检测到了操作系统并posix=True/False
相应地使用,我仍然会被第二个参数中包含的双引号所困扰,这是不应该的。
python - 子进程 popen 的命令不适用于 shell=False
我正在尝试使用我自己的 iptables 规则为使用 subprocess.open 的子进程运行子进程。该命令适用于shell=True
. 但是当我删除 shell 选项时,它会将 shell 选项设置为 false。该命令不再起作用。
这是工作代码:
当我删除shell=True
并使用 shlex 拆分我的命令时:
我收到错误:
我打印了拆分结果,看起来还不错:
['addgroup', '--system', 'no-external-internet;', 'iptables', '-A', 'OUTPUT', '-m', 'owner', '--gid-owner', 'no-external-internet'、'-d'、'127.0.0.1'、'-p'、'tcp'、'--sport'、'8000'、'-j'、'ACCEPT;'、'iptables '、'-A'、'OUTPUT'、'-m'、'owner'、'--gid-owner'、'no-external-internet'、'-j'、'REJECT;'、'ip6tables'、 '-A'、'OUTPUT'、'-m'、'owner'、'--gid-owner'、'no-external-internet'、'-j'、'REJECT;'、'sg'、'no -external-internet', './run.sh 127.0.0.1:8000']
为什么这不起作用,我该如何解决
python - 你如何从 curl 命令中打印出错误
我正在尝试使用 shlex 库来运行 curl 命令。我需要打印出错误。我已经完成了以下操作,但没有看到任何错误。
它没有发出任何错误。有任何想法吗?
python-3.x - Python3:shell 引用比 shlex.quote() 输出复杂吗?
在python3.8
,我有这个代码:
这是输出:
'ABC'"'"'DEF'
在此网页上很难区分双引号和单引号,因此这是对打印内容的描述:
当然,这是一个正确的 shell 引用,但它不是唯一可能的 shell 引用,而且它过于复杂。
另一种可能性很简单:
“ABC'DEF”
这是第二种可能性:
ABC\'DEF
我更喜欢这些更简单的版本。我知道如何编写python
代码将复杂版本转换为这些更简单的形式之一,但我想知道是否可能已经存在python
可以执行这种更简单的 shell 引用的函数。
提前感谢您的任何建议。