![](/img/trans.png)
[英]python in applescript: subprocess.call vs os.system in automator
[英]subprocess.call vs os.system python
第一次在這里提問:
我需要在Windows中映射網絡驅動器。 該位置是內部共享點文檔庫。
在cmd窗口中:
net use g: http://na.com/DMP/DMP/programming/
是成功的 - >命令完成了
os.system('"net use k: http://na.com/DMP/DMP/programming/"')
也很成功。
但是我想在已經映射驅動器的情況下使用subprocess.call - 我想嘗試另一個驅動器
call(["net", "use", ":q", '"http://na.com/DMP/DMP/programming/"'])
這失敗了“系統錯誤67已經發生。無法找到網絡名稱”我已經為最后一個列表項嘗試了很多選項而沒有運氣。
任何想法我可以在那里完成成功完成或不同的方法來映射驅動器。
您的代碼中至少存在兩個問題:
call(["net", "use", ":q", '"http://na.com/DMP/DMP/programming/"'])
首先,你有":q"
,你的意思是"q:"
。 這可能會導致net
命令將:q
解釋為您的網絡位置而不是目標驅動器,這可能會導致錯誤67。
其次,您在網址周圍有一組額外的引號: '"http://na.com/DMP/DMP/programming/"'
您應該在哪里使用'http://na.com/DMP/DMP/programming/'
。 當subprocess
構建要傳遞給CreateProcess
的字符串時,它已經引用了每個參數。 所以,如果你自己引用它們,你最終會雙重引用這些參數。 在某些情況下,這在Windows中實際上是不可能的,所以你最終會得到垃圾,但我認為這不是這種情況。 你會成功獲得此引用的字符串來net
,告訴它你想打開或者開始使用相對路徑"http:
或協議的URL "http
,或類似的東西。 無論是什么,它都不是一個可用的網絡位置,很可能會導致錯誤67。
正如Ben指出的那樣,你的system
調用有一個類似的問題 - 你在整個字符串周圍放了一對額外的引號。 如果你真的想弄清楚,可能有一些原因可以解決這個問題...但我認為你不想弄明白。 只是把它當作“我做錯了,但我很幸運”,並且不要在將來這樣做。
最后,正如文檔所說:
在Windows上,args序列轉換為可以解析的字符串
這意味着,如果您已經擁有適用於Windows的工作命令行,那么最好將其用作字符串,而不是嘗試將其分解為subprocess
重新組合的序列。
(請記住,這是僅適用於Windows真!在其他平台上,而不是建立一個命令行字符串傳遞給在函數CreateProcess
家庭, subprocess
建立一個字符串數組傳遞到在一個函數exec
家庭。)
所以,就這樣做:
call("net use g: http://na.com/DMP/DMP/programming/")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.