python指令生成指令碼 生成命令列程式使用指令碼

2021-10-11 04:44:16 字數 1989 閱讀 6950

場景

最近工作中需要經常使用ffmpeg一類的命令列程式,為了避免過多重複操作,於是思考了下編寫命令程式指令碼的幾種方式,包括c#,python,bat,powershell,shell。

c#/// 使用 process 呼叫程式

private static void ffmpeg()

using (var p = new process())

// 想要執行命令/程式名/程式絕對路徑

// ffmpeg 已新增至 path

p.startinfo.filename = @"ffmpeg";

p.startinfo.arguments = "-i 1.mp4 -c:v libx264 -c:a aac -y 1.flv";

// true 就無法重定向輸出或報錯

// p.startinfo.useshellexecute = false;

// ffmpeg 比較特殊,所有資訊都從error出

p.startinfo.redirectstandarderror = true;

= true;

p.start();

using (var reader = p.standarderror)

while (!reader.endofstream)

console.writeline(reader.readline());

// 等待程序

p.waitforexit();

python

fabric 基礎使用:

fabric中乙個函式對應乙個任務

檔名預設命名為fabfile,否者要使用-f file載入

使用 fab fun_name

fabfile.py:

from fabric.api import local

import json

def flv():

data = local('ffprobe -v quiet -print_format json -show_format -show_streams '.format('1.flv'), capture=true)

info = json.loads(data.stdout)

print(info['format']['duration'])

fab flv

bat批處理可以在win中快速編寫簡單命令指令碼

rem @echo off

for %%c in (*.mp4) do (

ffmpeg -i %%c -ss 1 -t 1 -v quiet -y %%~nc.flv

powershell

powershell是win上類bash的shell程式,它提供了比批處理更強大的能力,並且現在已開源,微軟也提供了官方的跨平台實現

第一次執行xx.ps1指令碼,可能會報許可權錯誤,在管理員許可權的powershell中執行set-executionpolicy remotesigned即可,參照張善友大神的博文

powershell的功能非常強大,同時也具有物件導向思維

# 獲取當前目錄所有flv時長

function flvinfo ($video)

$pattern = ".*?(?\d+).*?"

$line = ffprobe -v quiet -print_format json -show_format $video | where-object

$result = $line -match $pattern

$size = $matches.size

write-output "$video size: $size"

foreach ($item in get-childitem -filter "*.flv*") .flv

done

總結使用c#,python等方式呼叫命令列程式可以簡化批量處理大量重複、複雜和流程化的操作,而批處理,powershell,shell也可以快速簡單地減少命令使用,總的來說要根據具體場景選擇襲擊喜歡的方式吧。

Python指令碼生成csv檔案

usr bin python coding utf 8 匯入csv安裝包 import csv 1.建立檔案物件 f open 檔名.csv w encoding utf 8 newline 2.基於檔案物件構建 csv寫入物件 csv writer csv.writer f 3.構建列表頭 csv...

python指令碼生成exe檔案

pywin32 pyinstaller 安裝完成後,首先生成乙個test檔案,實現乙個簡單gui介面 from tkinter import class frame def init self,master none frame.init self,master self.createwidgets...

PowerDesigner 的指令碼生成

powerdesigner 的指令碼生成 powerdesigner的 各個版本會根據表的關係決定表的建立順序,不需要人為的對錶的建立順序進行排序。1 如果表之間沒有關係,那就沒有排序的必要性 2 如果表之間有外來鍵引用關係,那就看這種引用關係是內部還是外部的 例如a引用b,b引用c,那麼當建立外來...