[英]executing a subprocess from python
當我嘗試從 python 腳本執行子進程時,我認為有些東西被巧妙地破壞了
我嘗試使用一些(很多)參數來執行 vlc。
出現的 vlc 實例抱怨:
無法打開您的輸入:VLC 無法打開 MRL ' -vvv rtsp://192.168.1.201:554/ch0_multicast_one --sout=#transcode{acodec=none}:duplicate{dst=rtp{sdp=rtsp ://:5544/user_hash.sdp},dst=display}:no-sout-rtp-sap:no-sout-standard-sap:ttl=1:sout-keep'。 檢查日志以獲取詳細信息。
這是python代碼
pid = subprocess.Popen(["vlc "," -vvv rtsp://%s" % target_nvc.ip_address + ":554/ch0_multicast_one --sout=#transcode{acodec=none}:duplicate{dst=rtp{sdp=rtsp://:5544/user_hash.sdp},dst=display} :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep" ], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
我已經檢查了 subprocess 函數的輸出(使用 shell),如果我將該字符串復制粘貼到我的 cmd 窗口中,vlc 實例工作正常......這是特權嗎?
由於您將列表傳遞給subprocess.Popen
,因此每個參數都必須位於其自己的元素中。 所以你想要這樣的東西:
pid = subprocess.Popen([
"vlc",
"-vvv",
"rtsp://%s:554/ch0_multicast_one" % target_nvc.ip_address,
# etc
], ...)
每個參數(shell 通常會為您解析)必須位於單獨的列表元素中。
您還可以傳遞單個命令行字符串並讓 shell 將其分開:
pid = subprocess.Popen("vlc -vvv rtsp://...", shell=True, ...)
對於有很多參數的命令,使用第一種形式更好。
你應該用這個...
pid = subprocess.Popen(["vlc", "-vvv",
"rtsp://%s" % target_nvc.ip_address + ":554/ch0_multicast_one",
"--sout=#transcode{acodec=none}:duplicate{dst=rtp{sdp=rtsp://:5544/user_hash.sdp},dst=display}",
":no-sout-rtp-sap", ":no-sout-standard-sap",
":ttl=1", ":sout-keep" ], stdout=subprocess.PIPE,
stderr=subprocess.PIPE, stdin=subprocess.PIPE)
movies_path = glob.glob("D:\\MOVIES\**\*\*\*.mp4", recursive=True) + \
glob.glob("D:\\MOVIES\**\*\*\*.mkv", recursive=True) + \
glob.glob("D:\\MOVIES\**\*\*\*.avi", recursive=True)
rightMoviePath = difflib.get_close_matches(which_movie, movies_path, len(movies_path), 0) movie_name = rightMoviePath[0].split("\")[-1] hebrew_subtitle_path = glob.glob(rightMoviePath[0].replace(movie_name, " Hebrew.srt"))[0] english_subtitle_path = glob.glob(rightMoviePath[0].replace(movie_name, "English.srt"))[0]
process, player = subprocess.Popen(["C:\Users\yonat\Downloads\VLC\vlc.exe", "--sub-file", hebrew_subtitle_path, rightMoviePath[0]], stdin=subprocess.PIPE, stdout=子進程.PIPE, stderr=子進程.PIPE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.