python 关于系统调用command line的几种调用方式

python 调用command line的两种方式

background:在deepfake detection 比赛中需要对视频是否篡改进行辨别,在此之前需要进行数据预处理,对视频处理有

  • 可以通过moviepy直接对视频整体进行处理
  • 可以通过ffmpeg对视频进行frame拆解,拆解出来的可以cv2进行图片的处理。
  • 可以通过ffmpeg的其他指令(需要借助terminal 进行运行的指令对视频进行处理。因为python的ffmpeg中并没有对应的封装好的可以实现终端中对应的库函数所可以使用的方法,所以

利用os中的popen方法

在os包中,有popen3、popen等方法,利用popen()调用命令行语句

os.popen(cmd,mode,buffer) 
# cmd 为要执行的指令 ,  
# mode 为模式,有"r","w"模式
# buffer 为缓冲,需要缓冲为1,不需要缓冲为0

利用subprocess子进程去执行指令

subprocess.Popen(
    args, 
    bufsize=0, 
    executable=None, 
    stdin=None, 
    stdout=None, 
    stderr=None,
    preexec_fn=None, 
    close_fds=False, 
    shell=False, 
    cwd=None, 
    env=None, 
    universal_newlines=False, 
    startupinfo=None, 
    creationflags=0
)

这个函数类似网络模型构建中的那种函数,参数很多,但是在一般调用的过程中必要的参数args是要调用的指令的字串,shell=True

import subprocess
p = subprocess.Popen('open /Users/aczy156',shell=True)
print(p.pid)

关于subprocess的子进程问题:
利用subprocess相当于开了一个子进程,可以通过print(p.pid)来看该子进程的属性。
如果执行该子进程是持续进行的进程 例如

cmd = "ffplay /users/aczy156/----.mp4"
subprocess.Popen(cmd,shell=True)

由于子进程是一个持续的过程,需要等待该子进程执行

p = subprocess.Popen(cmd,shell=True)
p.wait()

如果子进程是不是持续进行,即执行即完成,则无需让子进程等待,直接执行Popen即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值