我有一個python腳本,用於調用重命名文件的bash腳本。然後我需要文件的新名稱,以便python可以對它進行一些進一步的處理。我使用subprocess.Popen來調用shell腳本。 shell腳本回顯新的文件名,所以我可以使用stdout = subprocess.PIPE來獲取新的文件名。將shell腳本輸出分配給python變量,忽略錯誤消息
問題是,有時bash腳本會根據具體情況嘗試用舊名稱重命名該文件,因此會給出消息,指出mv命令中的這兩個文件是相同的。我剔除了其他所有內容,並在下面列出了一個基本示例。
$ ls -1
test.sh
test.txt
這個shell腳本只是強制錯誤信息的一個例子。
$ cat test.sh
#!/bin/bash
mv "test.txt" "test.txt"
echo "test"
在蟒蛇:
$ python
>>> import subprocess
>>> p = subprocess.Popen(['/bin/bash', '-c', './test.sh'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>> p.stdout.read()
"mv: `test.txt' and `test.txt' are the same file\ntest\n"
我怎麼能忽略來自mv命令的消息,只得到echo命令的輸出?如果一切順利,shell腳本的唯一輸出將是echo的結果,所以我只需要忽略mv錯誤消息。
感謝,
傑蘭特
如果您不想在'stdout'上看到錯誤消息,請勿將'stderr'發送到'stdout'。 –
所以你不想知道命令是否成功? –