管道命令行

时间:2013-02-25 22:14:46

标签: python

我正在使用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 个答案:

答案 0 :(得分:1)

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

subprocess.call(process_call, shell=True)

答案 1 :(得分:0)

我建议您尝试envoy。它只是subprocess周围的一个小包装器,它暴露了一个更好的API,使管道非常简单和直观。

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

答案 2 :(得分: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!

答案 3 :(得分:0)

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