←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Python
Problem z zakończeniem readline()

  • +
  • -
Rivit - zdjęcie Rivit 14.03.2019

Witam,

napisałem sobie taki skrypcik podręczny do pobierania rzeczy z YT (mniejsza). No i pobiera elegancko. Problemem jest to, że wali błędami typu:

ERROR: [Errno 22] Invalid argument
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp1250'>
OSError: [Errno 22] Invalid argument

Jak na moje funkcja readline() wisi i po tym jak program youtube-dl pobierze rzeczy z jednego kanału i subprocess zakończy się to ten readline() rzuci błędem. Ktoś ma jakiś pomysł?

 

 

Spoiler

 

 

 

 


Użytkownik TibacK edytował ten post 14.03.2019 18:15
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 14.03.2019

Czyli co, to po prostu jakiś bug?

Oblatałem rano chyba z 100 tematów na staku. Próbowałem w blok 'try' dodawać itp, ale nie jest łapany wyjątek. (albo jeszcze nie ogarniam na tyle pythona)

def executeCommand(cmd):
	
	process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
	while True:
		if process.poll() is not None:
			break;
		
		try:
			nextline = process.stdout.readline()
		except IOError:
			sys.stdout.write("Exc on close: " + str(sys.exc_info()[0]) + "\n")
		
		if nextline != '':
			nextline = nextline.decode("utf-8", errors="ignore")

		if "upload date is not in range" in nextline:
			break
		try:
			sys.stdout.write(nextline)
			sys.stdout.flush()
		except IOError:
			sys.stdout.write("Exc on close: " + str(sys.exc_info()[0]) + "\n")
	try:
		process.stdout.close()
	except IOError:
		sys.stdout.write("Exc on close: " + str(sys.exc_info()[0]) + "\n")

	process.terminate()

output:

Rivit@DESKTOP-QEC4TCS D:\
$ update.py
[youtube:channel] UC-LTY8udwDeOUzMY8PIhD6w: Downloading channel page
[youtube:playlist] UU-LTY8udwDeOUzMY8PIhD6w: Downloading webpage
[download] Downloading playlist: Uploads from Poeta Kodu
[youtube:playlist] playlist Uploads from Poeta Kodu: Downloading 12 videos
[download] Downloading video 1 of 12
[youtube] os5xHYIeid4: Downloading webpage
[youtube] os5xHYIeid4: Downloading video info webpage
[youtube] os5xHYIeid4: Downloading MPD manifest
ERROR: [Errno 22] Invalid argument
ERROR: [Errno 22] Invalid argument
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp1250'>
OSError: [Errno 22] Invalid argument

Albo czy znasz może jakąś inną metodę przechwytywania stdout z running procesu?

Odpowiedz

  • +
  • -
l3szcz - zdjęcie l3szcz 30.03.2019

sys.stdout.write("Exc on close: " + str(sys.exc_info()[0]) + "\n")

Co zwraca?

Możesz sprawdzić przez: 

print(str(sys.exc_info())

Użytkownik l3szcz edytował ten post 30.03.2019 00:25
Odpowiedz