Próbuję uruchomić prosty plik .py z filmem przechwytującym kod ze skryptu powłoki. W tym celu użyłem zwykłego OpenCV. Teraz nazywam to .py ze skryptu powłoki. Kiedy wykonuję skrypt powłoki ze zintegrowanego terminala w VSCode, działa dobrze. Ale kiedy ten sam plik .py jest wykonywany z terminala, tj. Poza VSCode, wyrzuca to w terminalu:
Kod wyniku XmbTextListToTextProperty -2
I kończy wykonywanie (tj. przechwytuje klatki z kamery internetowej) pomimo tego, że pojawia się na terminalu
Test1.py to plik .py, który zawiera kod cv2 i odczytuje ramkę z kamery internetowej:
import cv2
img = None
vid = cv2.VideoCapture(0)
while True:
_, img = vid.read()
cv2.imshow("Frame", cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
if cv2.waitKey(5) & 0xFF == ord('y'):
break
vid.release()
cv2.destroyAllWindows()
Test.sh to skrypt powłoki, którego używam
#!/bin/bash
eval "$(conda shell.bash hook)"
conda activate facenet
python3 ./test1.py
Po wykonaniu testu.sh w Terminalu (tj. Poza zintegrowanym terminalem w VSCode):
(base) pranjal@pranjal99:~/Projects/WhosThere$ ./test.sh
XmbTextListToTextProperty result code -2
XmbTextListToTextProperty result code -2
XmbTextListToTextProperty result code -2
(base) pranjal@pranjal99:~/Projects/WhosThere$
UWAGA : Pomimo tych błędów pojawiających się w terminalu, kod jest wykonywany poprawnie. Ponadto, po uruchomieniu w zintegrowanym terminalu w VSCode, działa dobrze, tj. NIE zgłasza tych błędów
Po wielu próbach doszedłem do wniosku, że ta anomalia jest spowodowana linią, chociaż nie mam najmniejszego pojęcia, dlaczego
cv2.imshow("Frame", cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
Po usunięciu tej linii takie błędy nie pojawiają się w terminalu.
EDYTUJ: Po wydrukowaniu przeczytanego kształtu ramki otrzymujemy w terminalu (poza zintegrowanym terminalem VSCode):
(480, 640, 3)
XmbTextListToTextProperty result code -2
XmbTextListToTextProperty result code -2
XmbTextListToTextProperty result code -2
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
(480, 640, 3)
Byłoby naprawdę pomocne, gdyby ktoś poprowadził mnie we właściwym kierunku, aby rozwiązać te dziwne błędy.
1 odpowiedź
Nie mogę komentować, więc piszę tutaj. Czy to z powodu lokalizacji? Może możesz wpisać locale na swoim terminalu i zobaczyć, jaki jest ustawiony LANG. Spróbuj zmienić to na inne i zobacz.
Miałem podobny problem i rozwiązałem go, zmieniając wartość LANG z „en-IN” na „en_US.utf8”, a następnie ponownie uruchamiając.
Możesz użyć tego polecenia, aby go zaktualizować:
sudo update-locale LANG=name_of_locale_here
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.
if ret == True: cv2.imshow("Frame", cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
. Ale niestety to nie zadziałało. Ten sam błąd. Proszę mnie poprawić, jeśli zrobiłem coś niepoprawnie z twoją sugestią