這是一個來自raspberrypi.stackexchange.com的轉貼問題。雖然我試圖在樹莓派上使用python,但由於它不涉及任何pi特定的事情,所以我在這裏發佈了一些人的建議。原帖是here。從python返回256代碼
我試圖做一個Web UI來更改rapsberry PI的日期,但我不斷收到256
返回代碼目前我有什麼是這樣的:
網頁 - >提交一個Ajax請求python腳本 蟒蛇檢查字符串找什麼類型的命令(在這種情況下,時間/日期命令),拼在一起的,如:
sudo date --set="20130901 20:10"
並將其存儲在變量commandString
中。然後python去:
os.system(commandString)
和返回值一直傳遞到網站ui打印出來。
我現在還將commandString
的值返回到網絡用戶界面以驗證它,它看起來沒問題。
問題是,我每次測試時,都會返回256作爲錯誤返回碼。樹莓派上的日期當然不會改變,因爲我在前後手動檢查它。
但是,如果我手動去到Python的樹莓派和嘗試:
commandString = 'sudo date --set="20130901 20:10"'
os.system(commandString)
它的工作原理沒有問題。如果我在沒有sudo
的情況下嘗試它,那麼我的返回值也是256,所以我想也許這是我的原始腳本的權限問題。我試過this link來檢查我的腳本的權限,它似乎沒問題? (os.geteuid()
爲0)
如果重要,我使用lighttpd和fastcgi從web ui運行python。我的lighttpd配置目前是:
fastcgi.server = (
".py" => (
"python-fcgi" => (
"socket" => "/tmp/fastcgi.python.socket",
"bin-path" => "/var/www/command.py",
"check-local" => "disable",
"max-procs" => 1)
)
)
關於我失蹤的任何想法?
在原來的職位,也有人建議我嘗試類似:
echo <password> | sudo -S date --set="20130829 02:02
雖然它可能不是一個好主意,把我的root密碼那樣,我嘗試過了,得到了相同的結果:它在終端/ shell和python解釋器中工作,但不通過web ui到python。
你好,嘗試第一種方法(不需要輸出這個部分)現在產生一個錯誤代碼1.從搜索中,我認爲這意味着「操作不允許」? – mitim
好的。抱歉,馬上發表另一條評論,但這真的很奇怪。爲了好玩,我嘗試了沒有sudo(只是日期--set = ...),並將p.communicate改爲p.wait。有趣的是,我得到我的返回碼爲0,它似乎工作。 O.o關於爲什麼添加sudo(有和沒有密碼)的任何想法都給出了1的返回碼,但沒有讓它通過? (在腳本內os.geteuid()始終爲0)。我想我需要休息一下,關閉我的pi,然後再選擇它,以後再驗證,因爲這對於它的工作原理來說非常隨意。 = _ = – mitim
是...這似乎現在工作。使用子進程而不是os.system而不使用'sudo'與我的命令。 – mitim