mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-10-04 19:54:30 -04:00
@@ -2272,6 +2272,20 @@ def process_communicate_or_kill(p, *args, **kwargs):
|
||||
raise
|
||||
|
||||
|
||||
class Popen(subprocess.Popen):
|
||||
if sys.platform == 'win32':
|
||||
_startupinfo = subprocess.STARTUPINFO()
|
||||
_startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||
else:
|
||||
_startupinfo = None
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(Popen, self).__init__(*args, **kwargs, startupinfo=self._startupinfo)
|
||||
|
||||
def communicate_or_kill(self, *args, **kwargs):
|
||||
return process_communicate_or_kill(self, *args, **kwargs)
|
||||
|
||||
|
||||
def get_subprocess_encoding():
|
||||
if sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5:
|
||||
# For subprocess calls, encode with locale encoding
|
||||
@@ -3977,8 +3991,7 @@ def check_executable(exe, args=[]):
|
||||
""" Checks if the given binary is installed somewhere in PATH, and returns its name.
|
||||
args can be a list of arguments for a short output (like -version) """
|
||||
try:
|
||||
process_communicate_or_kill(subprocess.Popen(
|
||||
[exe] + args, stdout=subprocess.PIPE, stderr=subprocess.PIPE))
|
||||
Popen([exe] + args, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate_or_kill()
|
||||
except OSError:
|
||||
return False
|
||||
return exe
|
||||
@@ -3992,10 +4005,9 @@ def get_exe_version(exe, args=['--version'],
|
||||
# STDIN should be redirected too. On UNIX-like systems, ffmpeg triggers
|
||||
# SIGTTOU if yt-dlp is run in the background.
|
||||
# See https://github.com/ytdl-org/youtube-dl/issues/955#issuecomment-209789656
|
||||
out, _ = process_communicate_or_kill(subprocess.Popen(
|
||||
[encodeArgument(exe)] + args,
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT))
|
||||
out, _ = Popen(
|
||||
[encodeArgument(exe)] + args, stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate_or_kill()
|
||||
except OSError:
|
||||
return False
|
||||
if isinstance(out, bytes): # Python 2.x
|
||||
@@ -6155,11 +6167,11 @@ def write_xattr(path, key, value):
|
||||
+ [encodeFilename(path, True)])
|
||||
|
||||
try:
|
||||
p = subprocess.Popen(
|
||||
p = Popen(
|
||||
cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
|
||||
except EnvironmentError as e:
|
||||
raise XAttrMetadataError(e.errno, e.strerror)
|
||||
stdout, stderr = process_communicate_or_kill(p)
|
||||
stdout, stderr = p.communicate_or_kill()
|
||||
stderr = stderr.decode('utf-8', 'replace')
|
||||
if p.returncode != 0:
|
||||
raise XAttrMetadataError(p.returncode, stderr)
|
||||
|
Reference in New Issue
Block a user