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