设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 9376|回复: 3
打印 上一主题 下一主题

[求助] 关于使用subprogress的带空格的参数问题.

[复制链接]

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2016-1-6 03:51:09 |只看该作者 |倒序浏览
本帖最后由 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先生 请问我该如何处理这个参数问题呢?


回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2016-1-6 12:32:02 |只看该作者
试下用字符串前加r来限制字符转义,然后路径加上引号。
或者你直接在字符串里用\"表示引号。

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

当然,其实在开发中,我是建议不要用带空格的路径和中文路径,你不知道在哪里就会出问题
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

板凳
发表于 2016-1-7 16:34:36 |只看该作者
@crossin先生

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


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




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


效果同上.

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


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


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


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

不知道有没有什么方法? 是不是需要我做一个具体的实例, 这样会比较容易一些? @crossin先生
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2016-1-8 10:24:32 |只看该作者
anyone 发表于 2016-1-7 16:34
@crossin先生

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

我现在倒也没办法去做试验。我猜测
  1. r'"c:\py folder\b.py"'
复制代码
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-6-21 13:38 , Processed in 0.016191 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部