首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定哪个字符串子进程正在传递给命令行?

问如何确定哪个字符串子进程正在传递给命令行?
EN

Stack Overflow用户
提问于 2016-08-22 13:59:59
回答 1查看 109关注 0票数 3

在Windows上,通过传递字符串参数列表进行子进程调用,然后将其重新格式化为单个字符串以调用相关命令。它通过一系列规则来实现这一点,如文档这里中的大纲。

在Windows上,args序列被转换为可以使用以下规则(对应于MS C运行时使用的规则)解析的字符串:

  1. 参数由空白分隔,空白是空格或制表符。
  2. 被双引号包围的字符串被解释为单个参数,而不考虑包含在其中的空格。引用的字符串可以嵌入到参数中。
  3. 前加反斜杠的双引号被解释为文字双引号。
  4. 反斜杠是按字面解释的,除非它们紧跟在双引号之前。
  5. 如果反斜杠紧跟在双引号之前,则每对反斜杠都被解释为文字反斜杠。如果反斜杠的数目是奇数,则最后一个反斜杠转义下一个双引号,如规则所述。

然而,在实践中,这可能是很难做到的,因为不清楚字符串究竟是如何解释的。在弄清楚如何正确设置命令的格式时,可能会有尝试和错误。

是否有一种方法,我可以确定什么字符串子进程将制定?这样,我就可以检查它并确保它的格式是正确的,并且比记录命令的列表形式更好地记录它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-22 14:46:59

我深入研究了实际的子流程模块,并在其中找到了一个答案。有一个名为list2cmdline的函数,它通常只接受传递给Popen的列表,并将其转换为命令行参数的单个字符串。可以在列表中调用它以获得我需要的结果:

代码语言:javascript
复制
import subprocess

name = "Monty Python's Flying Circus"
path = r"C:\path\to\files"
subprocess.list2cmdline(["file.py", name, path])
# 'file.py "Monty Python\'s Flying Circus" C:\\path\\to\\files'
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39081535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档