2013-03-15 100 views
0

我有我的最新升級後似乎已停止工作的腳本。爲了找到問題,我寫了一個小腳本:Python不打印換行

import subprocess 

hdparm = subprocess.Popen(["xargs","echo"], 
       stdin=subprocess.PIPE) 

hdparm.stdin.write("Hello\n") 
hdparm.stdin.write("\n") 
hdparm.stdin.close() 
hdparm.wait() 
quit() 

這只是打印「你好」和一個新行,但我期待兩個換行符。這是什麼造成的? (我使用2.7.3此刻)

編輯:這裏是有問題的腳本(編輯爲清楚起見):

hdparm = subprocess.Popen(["hdparm", "--please-destroy-my-drive", "--trim-sector-ranges-stdin", "/dev/sda"], 
       stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
hdparm_counter = 0 
for rng in ranges_to_trim: 
    hdparm.stdin.write("%d:%d\n" % (rng["begin"],rng["length"])) 
    hdparm_counter += 1 
    if hdparm_counter > 63: 
     hdparm.stdin.write("\n") 
     hdparm_counter = 0 
if hdparm_counter != 0: 
    hdparm.stdin.write("\n") 
hdparm.stdin.close() 
hdparm.wait() 

編輯:我認爲這個問題是我的腳本本身。我需要將EOF發送給hdparm以使其執行任何所需的操作。

回答

5

xargs手冊頁:

本手冊頁文檔的xargs GNU版本。 xargs從標準輸入中讀取項目,由 空格(可以使用雙引號或單引號或反斜線保護)或換行符分隔,並使用任何初始值執行 命令(默認爲/ bin/echo)參數後跟從stan- dard輸入中讀取的項目。 標準輸入上的空行會被忽略。

(強調增加)。

此外,要添加 - 您看到的換行符是從echo本身。無論如何,xargs不會傳遞它。

+0

問題是,我實際上將其管道到'hdparm --trim-sector-ranges-stdin',它具有相同的效果。直到最近,換行符都被正確地傳送並且一切正常。我做了一個系統更新,現在hdparm接收一大堆範圍來修剪它無法處理的內容。 – Ivan 2013-03-15 04:33:46

+0

如果你用這個信息更新問題,那麼我們可以看到你在做什麼。 – FatalError 2013-03-15 04:36:00

+0

我添加了給我麻煩的腳本 – Ivan 2013-03-15 04:44:59