第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 python 腳本中使用名稱(“Web 內(nèi)容”)中的空格來 pkill 進(jìn)程

如何在 python 腳本中使用名稱(“Web 內(nèi)容”)中的空格來 pkill 進(jìn)程

茅侃侃 2023-10-25 10:37:19
美好的一天,這應(yīng)該是相當(dāng)簡單的,但我的谷歌搜索和實(shí)驗(yàn)不起作用。我有一個(gè) python 抓取腳本,它使用在 Ubuntu 18 服務(wù)器上運(yùn)行的 Selenium/geckodriver/Firefox。有時(shí)它無法正確關(guān)閉,Selenium 會(huì)使 midscript 崩潰,但它會(huì)使許多Web Content進(jìn)程保持打開狀態(tài)。如果不關(guān)閉,它們會(huì)耗盡所有內(nèi)存,然后 selenium 無法再打開并且腳本失敗。如果我從命令行運(yùn)行:pkill 'Web Content'它將殺死這些進(jìn)程并釋放內(nèi)存。在我的 python 腳本中,我使用該subprocess模塊嘗試在 Selenium 崩潰時(shí)自動(dòng)執(zhí)行此操作。我嘗試了多種選擇,包括:subprocess.call("pkill 'Web Content'".split())subprocess.call("pkill 'Web\ Content'".split())subprocess.call("pkill Web\ Content".split())subprocess.call("pkill -f Web\ Content".split())所有這些都會(huì)引發(fā)相同的錯(cuò)誤:pkill: only one pattern can be provided然而,如果我做了類似的事情,subprocess.call("pkill firefox".split())代碼就能夠運(yùn)行而不會(huì)出現(xiàn)錯(cuò)誤。我必須做什么才能解決這個(gè)問題?謝謝。
查看完整描述

2 回答

?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

自己手動(dòng)拆分命令行可以顯著簡化整個(gè)問題。

subprocess.run(['pkill', 'Web Content'], check=True)

如果您確實(shí)需要 Python 來執(zhí)行拆分,shlex.split()請實(shí)現(xiàn)您假設(shè) Python 常規(guī)split函數(shù)將遵守的規(guī)則。事實(shí)并非如此;它只是在您提供的字符串上拆分,不支持轉(zhuǎn)義等。


查看完整回答
反對 回復(fù) 2023-10-25
?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

您有 2 個(gè)選擇:

使用subprocess.call("pkill 'Web Content'", shell=True)?或

subprocess.call(shlex.split("pkill 'Web Content'"))

選項(xiàng)1

來自文檔

在 shell=True 的 POSIX 上,shell 默認(rèn)為 /bin/sh。如果 args 是字符串,則該字符串指定要通過 shell 執(zhí)行的命令。這意味著字符串的格式必須與在 shell 提示符下鍵入時(shí)完全相同。

split()將 Python 字符串拆分為空格:

>>>?"pkill?'Web?Content'".split()
['pkill',?"'Web",?"Content'"]

因此,為:subprocess.call("pkill 'Web Content'".split())提供了兩個(gè)參數(shù),而它只需要一個(gè)參數(shù)。這就是錯(cuò)誤彈出的原因。pkill"'Web""Content'"pkill: only one pattern can be provided

請注意等同于的subprocess.call?簽名subprocess.Popen

subprocess.Popen(args,..

來自文檔:

args 應(yīng)該是程序參數(shù)的序列,或者是單個(gè)字符串或類似路徑的對象。默認(rèn)情況下,如果 args 是一個(gè)序列,則要執(zhí)行的程序是 args 中的第一項(xiàng)。

使用時(shí)還要注意安全注意事項(xiàng)shell=True

選項(xiàng)2

如果您想提供 args 序列,請使用shlex.split

>>>?s?=?"pkill?'Web?Content'"
>>>?import?shlex
>>>?args?=?shlex.split(s)
>>>?import?subprocess
>>>?subprocess.call(args)

shlex.split將使用類似 shell 的語法分割字符串。s

使用哪個(gè)選項(xiàng)取決于您:

了解 shell=True 與 shell=False 使用 shell=True 將單個(gè)字符串傳遞給 shell,shell 從那里獲取它。

使用 shell=False 可以繞過 shell 將參數(shù)列表傳遞給操作系統(tǒng)。

當(dāng)您沒有 shell 時(shí),您可以保存進(jìn)程并消除相當(dāng)大量的隱藏復(fù)雜性,這可能會(huì)或可能不會(huì)隱藏錯(cuò)誤甚至安全問題。

另一方面,當(dāng)您沒有 shell 時(shí),您就沒有重定向、通配符擴(kuò)展、作業(yè)控制和大量其他 shell 功能。


查看完整回答
反對 回復(fù) 2023-10-25
  • 2 回答
  • 0 關(guān)注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)