ホームページ  >  記事  >  バックエンド開発  >  Pythonで他のプログラムを呼び出す方法

Pythonで他のプログラムを呼び出す方法

尚
オリジナル
2019-07-03 14:02:4610233ブラウズ

Pythonで他のプログラムを呼び出す方法

Python では、os モジュールを使用して他のスクリプトやプログラムを簡単に実行できるため、スクリプト内で他のスクリプトやプログラムが提供する関数を直接使用することができます。この関数のコード。実行中のプロセスをより適切に制御するには、win32process モジュールの関数を使用できます。プロセスをさらに制御したい場合は、ctype モジュールを使用して kernel32.dll の関数を直接呼び出すことができます。

1. os.system() 関数

os モジュールの system() 関数は、他のプログラムやスクリプトを簡単に実行できます。モードは次のとおりです。

##os.system(command): command: 実行するコマンド。スクリプトにパラメータを渡したい場合は、スペースを使用してプログラムと複数のパラメータを区切ります。

例:

#打开记事本
os.system('notepad')

#用记事本打开aa.txt
os.system('notepad aa.txt') #aa.txt文件必须在当前程序目录

#直接打开aa.txt
os.system('aa.txt')

#直接打开Excel文件
os.system('aa.xlsx')

#直接打开Word文件
os.system('bb.docx')

filepath='测试.xlsx'
#打开包含中文的文件
os.system(filepath.decode('utf8').encode('GBK'))

2, ShellExecute 関数

win32api モジュールの ShellExecute() 関数を使用して他のプログラムを実行します。形式は次のとおりです。

ShellExecute(hwnd, op, file, args, dir, show)


hwnd: 親ウィンドウのハンドル。親ウィンドウがない場合は 0

op: 実行される操作。 open、print、または空

file: 実行するプログラム、または開かれたスクリプト

args: プログラムに渡されるパラメータ、ファイルが開かれている場合は空

dir: プログラムによって初期化されたディレクトリ

show: ウィンドウを表示するかどうか

ShellExecute 関数を使用することは、リソース マネージャーでファイル アイコンをダブルクリックすることと同じであり、システムは対応するプログラムを開いて実行します。

import win32api

win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 0)           # 后台执行
win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 1)           # 前台打开
win32api.ShellExecute(0, 'open', 'notepad.exe', 'wmi.txt', '', 1)      # 打开文件
win32api.ShellExecute(0, 'open', 'iexplore.exe', '', '', 1)             # 打开IE浏览器
win32api.ShellExecute(0, 'open', 'iexplore.exe', 'https://www.baidu.com/', '', 1)   # 用IE浏览器打开百度网址
win32api.ShellExecute(0, 'open', 'mspaint.exe', 'wxqr.png', '', 1) #用系统附件自带的画图打开图片wxqr.png

3. CreateProcess

プロセスの作成:

スクリプトを介して実行されるプログラムの制御を容易にするために、win32process モジュールの CreateProcess() 関数を使用して、対応するプログラムを実行するプロセスを作成します。その関数の形式は次のとおりです。 CreateProcess(appName, cmdLine, proAttr, threadAttr, InheritHandle, CreationFlags, newEnv, currentDir, Attr)

appName: 実行可能ファイル名

cmdLine: コマンド ライン パラメーター

procAttr :プロセス セーフティ属性

threadAttr: スレッド セーフティ属性

InheritHandle: 継承フラグ

CreationFlags: 作成フラグ

currentDir: プロセスの現在のディレクトリ

Attr: 作成したプログラムの属性

プロセスの終了:


作成したプロセスを終了するには、win32process.TerminateProcess 関数を使用できます。関数の形式は次のとおりです。 :

TerminateProcess(handle, exitCode)

handle: 操作するプロセス ハンドル

exitCode: プロセスの終了コード

または、win32event.WaitForSingleObject を使用します。関数の形式は次のとおりです:

WaitForSingleObject(handle, mili秒)

handle: 操作対象プロセスのハンドル

milisec: 待機時間。-1 の場合は待ち続けます。

import win32process

# 打开记事本,获得其句柄
handle = win32process.CreateProcess(r'C:\Windows\notepad.exe', '', None, None, 0, win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO())
time.sleep(4)

# 终止进程
win32process.TerminateProcess(handle[0], 0)
import win32event

#等待进程结束  
print  win32event.WaitForSingleObject(handle[0], -1)

4. ctypes を使用して kernel32 の関数を呼び出す。dll

ctypes モジュールを使用すると、Python で kernel32 の関数を呼び出すことができます。ダイナミックリンクライブラリ。

ctypes モジュールは、ダイナミック リンク ライブラリ内の関数を呼び出す機能を Python に提供します。 ctypes モジュールを使用すると、C 言語で記述されたダイナミック リンク ライブラリを簡単に呼び出し、それにパラメータを渡すことができます。

ctypes モジュールは、C 言語で基本的なデータ型を定義し、C 言語で構造体と共用体を実装できます。 ctypes モジュールは、Windows、Linux、Mac OS などの複数のオペレーティング システムで動作し、基本的にクロスプラットフォームです。

例:

Windows で user32.dll の MessageBoxA 関数を呼び出します。

from ctypes import *
user32 = windll.LoadLibrary('user32.dll')
a = user32.MessageBoxA(0, str.encode('Hello Ctypes!'), str.encode('Ctypes'), 0)
print a

Pythonで他のプログラムを呼び出す方法

Python 関連の技術記事をさらに詳しく知りたい場合は、

Python チュートリアル 列にアクセスして学習してください。

以上がPythonで他のプログラムを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。