mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 22:55:18 +00:00 
			
		
		
		
	Moved from os.system to subprocess.call
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -26,5 +26,6 @@ updates_key.pem | ||||
| *.m4a | ||||
| *.m4v | ||||
| *.part | ||||
| *.swp | ||||
| test/testdata | ||||
| .tox | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							| @@ -123,7 +123,7 @@ from .postprocessor import ( | ||||
|     FFmpegExtractAudioPP, | ||||
|     FFmpegEmbedSubtitlePP, | ||||
|     XAttrMetadataPP, | ||||
|     ExecAfterDownload, | ||||
|     ExecAfterDownloadPP, | ||||
| ) | ||||
|  | ||||
|  | ||||
| @@ -865,7 +865,7 @@ def _real_main(argv=None): | ||||
|         # Please keep ExecAfterDownload towards the bottom as it allows the user to modify the final file in any way. | ||||
|         # So if the user is able to remove the file before your postprocessor runs it might cause a few problems. | ||||
|         if opts.execstring: | ||||
|             ydl.add_post_processor(ExecAfterDownload(commandString=opts.execstring)) | ||||
|             ydl.add_post_processor(ExecAfterDownloadPP(verboseOutput=opts.verbose,commandString=opts.execstring)) | ||||
|  | ||||
|         # Update version | ||||
|         if opts.update_self: | ||||
|   | ||||
| @@ -9,7 +9,7 @@ from .ffmpeg import ( | ||||
|     FFmpegEmbedSubtitlePP, | ||||
| ) | ||||
| from .xattrpp import XAttrMetadataPP | ||||
| from .execafterdownload import ExecAfterDownload | ||||
| from .execafterdownload import ExecAfterDownloadPP | ||||
|  | ||||
| __all__ = [ | ||||
|     'AtomicParsleyPP', | ||||
| @@ -20,5 +20,5 @@ __all__ = [ | ||||
|     'FFmpegExtractAudioPP', | ||||
|     'FFmpegEmbedSubtitlePP', | ||||
|     'XAttrMetadataPP', | ||||
|     'ExecAfterDownload', | ||||
|     'ExecAfterDownloadPP', | ||||
| ] | ||||
|   | ||||
| @@ -1,36 +1,39 @@ | ||||
| # ExecAfterDownload written by AaronM / mcd1992. | ||||
| # If there are any issues with this postprocessor please contact me via github or admin@fgthou.se | ||||
|  | ||||
| import os, re, shlex | ||||
| from __future__ import unicode_literals | ||||
| from .common import PostProcessor | ||||
| from ..utils import PostProcessingError | ||||
| import subprocess | ||||
| import shlex | ||||
|  | ||||
| class ExecAfterDownload( object ): | ||||
|     _downloader = None | ||||
|  | ||||
|     def __init__( self, downloader = None, commandString = None ): | ||||
|         self._downloader = downloader | ||||
| class ExecAfterDownloadPP(PostProcessor): | ||||
|     def __init__(self, downloader=None, verboseOutput=None, commandString=None): | ||||
|         self.verboseOutput = verboseOutput | ||||
|         self.commandString = commandString | ||||
|  | ||||
|     def set_downloader( self, downloader ): | ||||
|         """Sets the downloader for this PP.""" | ||||
|         self._downloader = downloader | ||||
|  | ||||
|     def run(self, information): | ||||
|         self.targetFile = information["filepath"] | ||||
|         self.finalCommand = None; | ||||
|         self.targetFile = information['filepath'].replace('\'', '\'\\\'\'')  # Replace single quotes with '\'' | ||||
|         self.commandList = shlex.split(self.commandString) | ||||
|         self.commandString = '' | ||||
|  | ||||
|         if( re.search( '{}', self.commandString ) ): # Find and replace all occurrences of {} with the file name. | ||||
|             self.finalCommand = re.sub( "{}", '\'' + self.targetFile + '\'', self.commandString ) | ||||
|         # Replace all instances of '{}' with the file name and convert argument list to single string. | ||||
|         for index, arg in enumerate(self.commandList): | ||||
|             if(arg == '{}'): | ||||
|                 self.commandString += '\'' + self.targetFile + '\' ' | ||||
|             else: | ||||
|             self.finalCommand = self.commandString + ' \'' + self.targetFile + '\'' | ||||
|                 self.commandString += arg + ' ' | ||||
|  | ||||
|         if( self.finalCommand ): | ||||
|             print( "[exec] Executing command: " + self.finalCommand ) | ||||
|             os.system( self.finalCommand ) | ||||
|         else: | ||||
|             raise PostProcessingExecError( "Invalid syntax for --exec post processor" ) | ||||
|         if self.targetFile not in self.commandString:  # Assume user wants the file appended to the end of the command if no {}'s were given. | ||||
|             self.commandString += '\'' + self.targetFile + '\'' | ||||
|  | ||||
|         print("[exec] Executing command: " + self.commandString) | ||||
|         self.retCode = subprocess.call(self.commandString, shell=True) | ||||
|         if(self.retCode < 0): | ||||
|             print("[exec] WARNING: Command exited with a negative return code, the process was killed externally. Your command may not of completed succesfully!") | ||||
|         elif(self.verboseOutput): | ||||
|             print("[exec] Command exited with return code: " + str(self.retCode)) | ||||
|  | ||||
|         return None, information  # by default, keep file and do nothing | ||||
|  | ||||
|  | ||||
| class PostProcessingExecError(PostProcessingError): | ||||
|     pass | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 mcd1992
					mcd1992