2013-02-25 172 views
0

我使用in2csv將.xls文件夾轉換爲使用python子流程模塊的.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,而它說無法識別的參數:>(new_name)。你如何將輸入輸出到輸出文件?

+2

'shlex.split'你的參數字符串在使用'subprocess.call'之前 – Amelia 2013-02-25 22:23:05

+0

請改爲一個實際的問題。 – joce 2013-02-25 22:33:53

+0

問題已解決,在我的文本編輯器中使用製表符和空格問題。謝謝大家。 – user2109046 2013-02-26 13:31:37

回答

0

我建議試一試envoy。這只是一個小小的包裝,圍繞着subprocess這暴露了一個更好的API,使管道相當簡單和直觀。

但是,如果這就是你所做的一切,那麼你應該打印出process_call並嘗試從那裏進行調試。我看不到您的代碼無法正常工作的明顯原因。

0

爲碩人建議,使用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! 
1

重定向操作符「>」被shell處理,所以你必須要告訴call您希望它使用shell:

subprocess.call(process_call, shell=True) 
0

問題解決了。我的代碼編輯器中的選項卡和空間問題。謝謝你們。