我在python腳本給得到錯誤,同時通過
subprocess.call(['ping', '127.0.0.1', '>>', 'out15.txt'])
聲明subprocess.call()執行ping操作。
但我收到未知的主機錯誤。
請讓我知道爲什麼我得到這個錯誤。
我在python腳本給得到錯誤,同時通過
subprocess.call(['ping', '127.0.0.1', '>>', 'out15.txt'])
聲明subprocess.call()執行ping操作。
但我收到未知的主機錯誤。
請讓我知道爲什麼我得到這個錯誤。
原因您將>> out15.txt
傳遞給ping作爲參數。 >>
是cmd \ bash的特殊字符。如果硬要將輸出重定向與命令文件,而不是使用Python代碼,你可以是這樣做的:
subprocess.call(['cmd', '/c', 'ping', '127.0.0.1', '>>', 'out15.txt'])
同樣對於bash。
你能解釋我爲什麼你給cmd,/ c在subprocess.call()@Ori Seri – bvb
正如我所說的,'>>'是cmd的一個特殊字符。 Ping不知道這個標誌,它把它作爲你想要ping的主機的一部分,並試圖解決它。所以,我打開了cmd進程而不是ping進程。/c參數告訴cmd運行以下命令並退出(在我們的例子中爲ping)。 Cmd引用'>>'作爲重定向,因此將ping的stdout重定向到一個文件。注意:cmd進程負責重定向輸出,而不是ping進程。 –
Iam得到錯誤OSError(Errno 2):沒有這樣的文件或目錄,當我給了subprocess.call(),如上所述 - @ Ori Seri – bvb
由於@Ori Seri pointed out>>
通常是由一個shell解釋:
from subprocess import call
call('ping 127.0.0.1 >> out15.txt', shell=True)
注:與shell=True
字符串參數。
你可以做它沒有外殼:
with open('out15.txt', 'ab', 0) as output_file:
call(["ping", "127.0.0.1"], stdout=output_file)
注:與shell=False
(默認值)列表的說法。
您不需要編寫輸出文件來解釋ping
結果;您可以使用退出狀態代替:
from subprocess import call, DEVNULL
ip = "127.0.0.1"
rc = call(["ping", '-c', '3', ip], stdout=DEVNULL)
if rc == 0:
print('%s active' % ip)
elif rc == 2:
print('%s no response' % ip)
else:
print('%s error' % ip)
是'localhost'工作?最新錯誤? – Arvind
是的localhost正在工作,錯誤是「ping未知主機」@Arvind – bvb
你似乎期待shell解釋。這不是'ping'知道如何去做的事情;這是'bash'或者你使用的任何shell。有一個shell命令將命令通過shell,但它是一個柺杖。以其他方式獲得效果更安全。 – user2357112