问题标签 [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.

0 投票
3 回答
43 浏览

python - 驯服 shlex.split() 行为

SO上还有其他问题接近回答我的问题,但我有一个非常具体的用例,我无法解决。考虑一下:

这会引起麻烦,因为program.exe使用以下参数调用:

也就是说,双反斜杠不再存在,因为它被shlex.split()删除了。当然,我可以改为(如其他答案所示)这样做:

但是 thenprogram.exe被这些参数有效地调用:

这也不好,因为现在双引号已经成为第一个参数内容的一部分,它们不属于它们,即使第二个参数现在很好。第三个参数已经变得一团糟。

用正斜杠替换反斜杠,或用正则表达式删除引号都不起作用,原因类似。

有没有办法shlex.split()在服务器名称之前留下双反斜杠?还是根本没有?为什么它首先删除它们?

请注意,它们本身是完全有效的命令(无论如何分别在 Windows 和 Linux 上):

即使我确实检测到了操作系统并posix=True/False相应地使用,我仍然会被第二个参数中包含的双引号所困扰,这是不应该的。

0 投票
0 回答
45 浏览

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']

为什么这不起作用,我该如何解决

0 投票
0 回答
19 浏览

python - 你如何从 curl 命令中打印出错误

我正在尝试使用 shlex 库来运行 curl 命令。我需要打印出错误。我已经完成了以下操作,但没有看到任何错误。

它没有发出任何错误。有任何想法吗?

0 投票
1 回答
36 浏览

python-3.x - Python3:shell 引用比 shlex.quote() 输出复杂吗?

python3.8,我有这个代码:

这是输出:

'ABC'"'"'DEF'

在此网页上很难区分双引号和单引号,因此这是对打印内容的描述:

当然,这是一个正确的 shell 引用,但它不是唯一可能的 shell 引用,而且它过于复杂。

另一种可能性很简单:

“ABC'DEF”

这是第二种可能性:

ABC\'DEF

我更喜欢这些更简单的版本。我知道如何编写python代码将复杂版本转换为这些更简单的形式之一,但我想知道是否可能已经存在python可以执行这种更简单的 shell 引用的函数。

提前感谢您的任何建议。