我使用 python 和一些外部程式 API 來自動化一些東西。請記住,這些“extpro”和“--file”和“--dont-breakaway-from-job”內置于我必須使用的命令中,我的代碼如下所示:
send = os.system('extpro --file '(os.path.join(base_dir, extpr_path))' --dont-breakaway-from-job')
我得到的錯誤是在 --dont-breakaway-from-job 上,說預期的“)”pylance。
但是當我嘗試這個時沒有錯誤:
send = os.system('extpro --file "C:/user/program/run.exe" --dont-breakaway-from-job')
任何人都知道這種行為背后可能是什么?有沒有辦法將整個命令分成兩個或三個?
歡迎任何建議,謝謝!
uj5u.com熱心網友回復:
os.path.join回傳str物件,因此您的
'extpro --file '(os.path.join(base_dir, extpr_path))' --dont-breakaway-from-job'
擴展為:
'extpro --file '"<whatever that path is>"' --dont-breakaway-from-job'
^
在標有^字串結束的位置。并且,由于os.system只需要一個引數,pylance(和解釋器也是如此)假設這個引數已經被傳遞并拋出一個錯誤,所以需要右括號。
解釋器不會將os.path.join結果與之前的字串連接起來,因為它不知道這os.path.join是一個字串。函式呼叫只會在運行時變成字串。
但是,您的第二個變體包含'some str "inner str" some more'. Python 解釋器看到字串,以'(single qotation mark) 開頭并查找匹配的對,這將意味著字串的結尾。"單引號之間的所有(雙引號)都被視為字串的一部分。
解決方法很簡單。您可以執行以下任何操作:
# Concatenating strings with
send = os.system('extpro --file "' os.path.join(base_dir, extpr_path) '" --dont-breakaway-from-job')
# Using format (or f-strings, ifyou're using python 3.6 )
send = os.system('extpro --file "{}" --dont-breakaway-from-job'.format(os.path.join(base_dir, extpr_path)))
# or
send = os.system(f'extpro --file "{os.path.join(base_dir, extpr_path)}" --dont-breakaway-from-job')
在 3 個變體中的任何一個中,值得os.path.join用"(雙引號)包裝結果,以防它包含空格或其他不需要的符號,這可能會被錯誤決議
uj5u.com熱心網友回復:
您的行send = os.system('extpro --file '(os.path.join(base_dir, extpr_path))' --dont-breakaway-from-job')不會創建您期望/需要的字串,也不會'extpro --file '與檔案路徑(在"! 和 內' --dont-breakaway-from-job')連接。
最簡單的解決方案可能是使用 F 弦:
send = os.system(f'extpro --file "{os.path.join(base_dir, extpr_path)}" --dont-breakaway-from-job')
這里也很重要的是添加"到字串中,因為os.path.join(...)不會創建帶有".
uj5u.com熱心網友回復:
如果我理解正確,問題是您需要用引號連接字串?如果是這種情況,您可以使用以下方法
send = os.system("extpro --file \"" os.path.join(base_dir, extpr_path) "\" --dont-breakaway-from-job")
os.path.join 回傳一個需要使用 連接的字串。此外,您需要在os.path.join. 這可以通過多種方式實作,但我在這個答案中使用的是\".
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312615.html
