【发布时间】:2011-03-14 18:48:51
【问题描述】:
我在 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
当我从回溯中复制修改后的文件名(带有双斜杠)以检查是否存在时,系统无法找到它。
问题:如何将路径作为参数传递,以便在不更改为双斜杠的情况下对其进行处理,以便系统可以读取文件?
注意:os.sep 也不能解决问题。
编辑:使用 os.system 执行完美,但问题是获取输出以供以后使用。我目前在一个模块(run_parser.py)中使用 os.sytem,然后在另一个模块(get_parse_status.py)中使用子进程,打开 run_parser.py 来获取输出。会感激任何比这更好的东西。
感谢您的时间。
【问题讨论】:
-
您可以访问 parser.py 吗?您可以发布任何相关部分吗?
-
parser.py 是一个大应用程序。它失败的相关内容是当它尝试将文件输入作为参数 -f 读取时。
-
k = subprocess.Popen(['python', 'parser.py', '-f','"C:\Report1\2011-03-14.txt"'], shell=是的,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)试试这个。
-
感谢 Nate 和 Uku。不幸的是,不起作用。得到同样的错误。
-
您确定是逐字粘贴的吗?它是 ' 然后是 ".
标签: python subprocess