Crossin的编程教室

标题: [求助] 关于使用subprogress的带空格的参数问题. [打印本页]

作者: anyone    时间: 2016-1-6 03:51
标题: [求助] 关于使用subprogress的带空格的参数问题.
本帖最后由 anyone 于 2016-1-6 04:03 编辑

我想使用subprogress调用cmd执行另外一个py, 如: b.py


如果在windows的cmd中, 可以直接这样使用b.py
  1. b.py "d:\input folder/input-file.txt" "e:\output folder/output-file.txt"
复制代码
请留意上面的目录名称中有空格, 所以我需要使用双引号. 如果在另外一个py中(如: a.py), 使用subprogress调用b.py, 这时就出现了问题.


失败的方案1:
  1. cmd = 'cmd'
  2. c = '/c'
  3. py = 'c:\py folder/b.py'
  4. input = 'd:\input folder/input-file.txt'
  5. output = 'e:\output folder/output-file.txt'

  6. command = [cmd, c, py, input, output]

  7. subprocess.call(command)
复制代码
这时会提示c:\py是未知程序, 说明这里没有很好的识别c:\py folder/b.py中的空格.

失败的方案2:

如果使用嵌套引号, 我以为是否就可以将带有引号的参数传递进去了,

  1. cmd = 'cmd'
  2. c = '/c'
  3. py = '"c:\py folder/b.py"'
  4. input = '"d:\input folder/input-file.txt"'
  5. output = '"e:\output folder/output-file.txt"'

  6. command = [cmd, c, py, input, output]

  7. subprocess.call(command)
复制代码
可是却告诉我\"c:\py folder/b.py\" 是不是系统命令, 这时内层的双引号变成了\"



我又尝试使用r来定义raw格式

  1. cmd = 'cmd'
  2. c = '/c'
  3. py = r'c:\py folder/b.py'
  4. input = r'd:\input folder/input-file.txt'
  5. output = r'e:\output folder/output-file.txt'

  6. command = [cmd, c, py, input, output]

  7. subprocess.call(command)
复制代码
仍然会提示c:\py是未知程序,





@crossin先生 请问我该如何处理这个参数问题呢?



作者: crossin先生    时间: 2016-1-6 12:32
试下用字符串前加r来限制字符转义,然后路径加上引号。
或者你直接在字符串里用\"表示引号。

还有种,你去cmd里面打cd 然后tab键看一下系统里是怎么表示空格的

当然,其实在开发中,我是建议不要用带空格的路径和中文路径,你不知道在哪里就会出问题
作者: anyone    时间: 2016-1-7 16:34
@crossin先生

试下用字符串前加r来限制字符转义,然后路径加上引号。


我尝试了这种, 但是似乎和失败方案2一样, 嵌套的"被认成: \", 以至于这样传递给命令后, 命令无法识别.




或者你直接在字符串里用\"表示引号。


效果同上.

还有种,你去cmd里面打cd 然后tab键看一下系统里是怎么表示空格的


系统是使用"file name.ext", 只是用引号, 而空格并不是特殊的符号.


当然,其实在开发中,我是建议不要用带空格的路径和中文路径,你不知道在哪里就会出问题


我只是想练习python, 用它和我比较熟悉的cmd批处理结合起来做一些实际的应用. 目前就卡在这个参数传递上.

不知道有没有什么方法? 是不是需要我做一个具体的实例, 这样会比较容易一些? @crossin先生
作者: crossin先生    时间: 2016-1-8 10:24
anyone 发表于 2016-1-7 16:34
@crossin先生

你路径前面是\后面是/,这好像不符合常规,不知道是不是这个原因。
你现在这个问题不在python上,只是那个命令识别带空格路径的问题。你如果不想更换路径的话,就要想办法试出可以让他识别的路径字符串。这跟编程语言本身关系不太大了

我现在倒也没办法去做试验。我猜测
  1. r'"c:\py folder\b.py"'
复制代码





欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5