Windows上的Python:路径作为子流程参数被修改并生成错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Windows上的Python:路径作为子流程参数被修改并生成错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1881字,纯文字阅读大概需要3分钟。
内容图文
![Windows上的Python:路径作为子流程参数被修改并生成错误](/upload/InfoBanner/zyjiaocheng/960/01136d847518455c9eb94b9c07007f6a.jpg)
我在Windows和Python 2.6上使用子进程如下.我试图使用遗留解析器应用程序(假设parser.py)解析文本文件,如下所示:
import subprocess
k = subprocess.Popen(['python', 'parser.py', '-f C:\Report1\2011-03-14.txt'],
shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print k.communicate()
这里的问题是文件名传递给遗留应用程序的方式,我无法更改代码但只能使用Python访问它.
它生成时出现以下错误:
IOError: [Errno 22] invalid mode (\'r\') or filename: C:\\Report1\\2011-03-14.txt
当我从traceback复制修改后的文件名(带有双正斜杠)来检查是否存在时,系统无法找到它.
问题:如何将路径作为参数传递,以便在不更改为双斜线的情况下处理它,以便系统可以读取文件?
注意:os.sep也无法解决问题.
编辑:使用os.system执行工作完美,但问题是获取输出供以后使用.我目前在模块(run_parser.py)中使用os.sytem,然后在另一个模块(get_parse_status.py)中使用子进程,Popens run_parser.py来获取输出.我会感激任何比这更好的东西.
谢谢你的时间.
解决方法:
更改参数列表以将路径编码为原始字符串:
k = subprocess.Popen(['python', 'parser.py', '-f', r'C:\Report1\2011-03-14.txt'],
shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
一个简单的程序,它读取文件并报告长度:
import sys
import os
userinput = sys.argv[1]
data = open(userinput, 'rb').read()
datalength = len(data)
fname = os.path.basename(userinput)
print "%s datasize = %s" % (fname, datalength)
然后通过解释器调用它:
>>> k = subprocess.Popen(['python', 'test2.py', 'w:\bin\test2.py'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>> k.communicate()
5: ('Traceback (most recent call last):\r\n File "w:\\bin\\test2.py", line 4, in <module>
data = open(userinput, \'rb\').read()
IOError: [Errno 22] invalid mode (\'rb\') or filename: 'w:\\x08in\\test2.py', None)
>>> k = subprocess.Popen(['python', r'w:\bin\test2.py', r'w:\bin\test2.py'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>> k.communicate()
6: ('test2.py datasize = 194\n', None)
内容总结
以上是互联网集市为您收集整理的Windows上的Python:路径作为子流程参数被修改并生成错误全部内容,希望文章能够帮你解决Windows上的Python:路径作为子流程参数被修改并生成错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。