看板 Linux 關於我們 聯絡資訊
各位前輩您好,由於不知道要放在linux還是python版,若有錯版我會馬上刪文 當我在terminal執行sudo ./sync_to_gps8 >123.txt時,都能夠順利執行,但因為我需要 用python去統整,所以我使用了python的subprocess 模組,但是當我一樣執行sudo ./sy nc_to_gps8 >123.txt,卻遇到了這個問題,但我也不知道這是錯在哪裡,希望各位前輩 指導,謝謝各位前輩 正常在terminal執行: https://i.imgur.com/m3CBuSH.jpg
用subprocess模組執行(發生錯誤): https://i.imgur.com/y9fmwq9.jpg
程式碼: https://i.imgur.com/dmIp5Dk.jpg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.75.220.152 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1621854211.A.0F7.html ※ 編輯: asd24693120 (42.75.220.152 臺灣), 05/24/2021 19:14:06
goldie: cwd 是否不在哪?找不到 python script 檔?05/24 19:48
goldie: 改執行 sudo pwd 印出路徑來看看?05/24 19:48
https://i.imgur.com/eaJkilv.jpg
goldie: 還有,文不對題05/24 19:48
想請問g大,我路徑印出來了,另外想請問我的標題有哪裡下的不對嗎?我立刻改,謝謝 您指導
oToToT: 文有不對題嗎OAO?05/24 20:15
oToToT: 你跟你上面一樣多加個 shell=True 就會動了吧05/24 20:19
真的,這樣就可以了,想請問o大為什麼這樣就可以了呢? ※ 編輯: asd24693120 (111.254.58.80 臺灣), 05/24/2021 20:27:58
oToToT: 我沒理解錯的話,你不加 shell=True 的話它會去找檔案名稱05/24 21:52
oToToT: 為 'sudo ./sync_ ...' 的程式來執行05/24 21:52
oToToT: 加了會真的 invoke 一個 shell 出來跑你給他的指令05/24 21:53
原來如此,謝謝o大
goldie: 推樓上 oToToT 大看出問題癥結點,高手!05/24 21:58
goldie: 這個問題比較像是同個命令能在一般 shell 執行,05/24 21:58
goldie: 但是卻無法執行於 Python 的 subprocess,05/24 21:58
goldie: 另外,錯誤訊息 No such file or directory 跟…05/24 21:58
goldie: ">" 重導向沒有關係,所以我才會覺得文不對題05/24 21:58
謝謝g大的建議,因為我也不太曉得要怎麼問才能完美表示出問題,經您這樣說,我大概 知道您的意思了
kenduest: 其實官方說很清楚,預設 shell=False 時候,你帶入的05/24 22:13
kenduest: 那個字串會當作要執行時間的程式檔案名稱05/24 22:14
kenduest: 你有用 shell 內 io 重導的符號時候,需要用 shell=True05/24 22:15
請問io重導是什麼意思呢?
kenduest: 畢竟這些符號只有 shell 可以認識,所以會開啟外部的05/24 22:15
kenduest: shell 程式,把整個字串當命令丟給 shell 執行 05/24 22:16
kenduest: shell=True 基本上就等於傳統 os.system() 使用05/24 22:17
kenduest: 若你不使用 shell=True 要使用 subprocess.call()05/24 22:19
kenduest: 一般就是得改成帶入 ['sudo', './sysnc_to_gps8']05/24 22:20
kenduest: 至於 > 123.txt, 可以用 open() 開檔帶入給 stdout 參數05/24 22:24
謝謝k大仔細的講解,讓我真的又學到了一課
oToToT: 推樓上講得更清楚05/24 22:38
Typebrook: 推,樓上解釋道得很清楚 05/25 08:27
真的很謝謝各位前輩耐心的指導~ ※ 編輯: asd24693120 (111.254.58.80 臺灣), 05/25/2021 08:55:14
goldie: ok理解,那不改標題也沒差多少了 05/25 12:20
goldie: io重導向指的是 shell 的 IO Redirection 05/25 12:31
goldie: 就是 >、<、2>&1、…、這類的東西 05/25 12:32
goldie: 由 shell 幫你重導 stdin/stdout/stderr 到其他 fd 或檔 05/25 12:33
goldie: 案 05/25 12:33
原來如此,謝謝g大指導
Bencrie: 其實就 exec sudo vs exec sh -c sudo 的差別05/25 13:33
嗚嗚,b大說的這個我也不是很懂 ※ 編輯: asd24693120 (42.74.31.161 臺灣), 05/26/2021 14:01:16