2017-08-04 108 views
1

我正在寫一個Python CGI腳本,我想在我的筆記本電腦的瀏覽器上運行。這個腳本將SSH連接到兩個Pis,並給出命令拍攝照片。託管此腳本的服務器位於我希望進入SSH的Pis之一,並且該Pi也充當其他Pi和我的筆記本電腦連接的訪問​​點(所有內容都是LAN,未連接到Internet) 。無法通過網絡瀏覽器訪問pi相機

我成功地在筆記本電腦的瀏覽器上運行此腳本,在Pis上運行諸如ls -l這樣的簡單命令,並在瀏覽器上打印出兩者的結果。但是,我最終希望能夠向Pis提供raspistill命令。當我這樣做時,只有服務器上的Pi正在拍攝圖像,但其他Pi沒有。我認爲這是因爲服務器的權限設置不正確(我試圖運行命令爲sudo,但仍然沒有運氣)。但是,如果我在Python IDLE上運行相同的腳本,它可以正常工作。有人可以幫助我找出問題嗎?

這裏是我的腳本:

#! /usr/bin/env python3 

from pssh import ParallelSSHClient 
import cgi 

print("Content-Type: text/plain\r\n") 
print("\r\n ") 

host = ['172.24.1.1','172.24.1.112'] 
user = 'XXXX' 
password = 'XXXX' 
client = ParallelSSHClient(host, user, password) 

output = client.run_command('raspistill -o test.jpg', sudo=True) 

// AMENDMENT: 
for line in output['172.24.1.1'].stdout: // works as well with '172.24.1.112' 
    print(line) 

修訂: 顯然,如果從stdout I輸出任何東西,它工作正常。爲什麼會這樣?是等着我沖洗輸出還是什麼?我懷疑這可能是我使用的pssh軟件包的問題。

回答

1

在徹底閱讀了pssh模塊的文檔後,我的問題與退出代碼以及它們的處理方式有關。

文檔有關run_command指出:

功能連接和認證成立後返回,並命令已被送往成功建立SSH通道後。

而作爲一個結果:

正因爲如此,退出代碼不會立即即使 立即命令該出口可用。

起初,我只是一味地運行run_command期待的命令到結束,但事實證明,我需要的退出代碼真正完成命令正在運行的進程。本細則規定一對夫婦的方式做到這一點:

至少

  • 迭代超過標準輸出/標準錯誤來完成
  • 調用client.join(output)需要引起parallel-ssh等待命令完成一個並能夠收集退出代碼。

這就是爲什麼我修改了代碼,在那裏我是從標準輸出輸出,命令似乎正常工作。

1

在您的pi中,進入終端並鍵入sudo raspi-config,然後用鑰匙導航至相機,然後啓用它。這會重新啓動你的pi。 從https://www.raspberrypi.org/documentation/configuration/camera.md

使用光標鍵移動到相機選項,並選擇「啓用」。 在退出raspi-config時,它會要求重啓。啓用選項 將確保在重新啓動時正確的GPU固件將與相機驅動程序和調整一起運行 ,並且GPU存儲器分割爲 足以使相機獲得足夠的內存以正確運行 。

之後,進入sudo raspi-config並啓用ssh(這是另一種選擇就像pi-camera)。此鏈接here

+0

我在兩個Pis上都啓用了攝像頭和ssh接口。它已經開始工作了。顯然,我需要輸出一些照片來拍攝,正如我的代碼修正中所指出的那樣。我不知道爲什麼會這樣。 –

相關問題