0

我正在使用 in2csv 使用 python 子进程模块将 .xls 文件夹转换为 .txt 文件。

 for filename in os.listdir(raw_data_folder):

    full_filename = raw_data_folder + '\\' + filename
    new_name = filename.split('.')
    new_name = new_name[0] + str('.txt')
    new_name = raw_data_folder + new_name
    process_call = 'in2csv "' + full_filename + '" > "' + new_name + '"'
    subprocess.call(process_call)

我不断得到非零退出状态 2,而它说无法识别的参数:>(新名称)。您如何将该输入通过管道传输到输出文件?

4

4 回答 4

1

重定向运算符 '>' 由 shell 处理,因此您必须告诉call它您希望它使用 shell:

subprocess.call(process_call, shell=True)
于 2013-02-25T22:30:03.133 回答
0

问题解决了。我的代码编辑器中的制表符和空格问题。谢谢你们。

于 2013-02-26T13:32:19.470 回答
0

我建议envoy试一试。它只是一个小的包装器,subprocess它公开了一个更好的 API,使管道变得非常简单和直观。

但如果这就是你所做的一切,那么你应该打印出来process_call并尝试从那里调试。我看不出您的代码不起作用的明显原因。

于 2013-02-25T22:23:14.807 回答
0

正如 Hiroto 建议的那样,使用该shlex.split功能

>>> import shlex, subprocess
>>> command_line = raw_input()
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
>>> args = shlex.split(command_line)
>>> print args
['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
>>> p = subprocess.Popen(args) # Success!
于 2013-02-25T22:28:39.183 回答