pythonアプリケーションの起動とアプリケーションの終了方法


1.目的
毎日出勤して、仕事は必要で、コンピュータの上で毎日機械をスタートさせます。一つずつ開けたり閉じたりするのは煩わしいようです。そして、このシナリオが生まれました。
2.環境
システム環境:
-win 7-32ビット
-python 2.7.9
pywin 32をインストールする必要があります。
pip install pywin 32
3.脚本を書く
アプリケーションスクリプトを起動

#coding=utf-8
 
import win32api
#      
win32api.ShellExecute(0, 'open', r'C:\Program Files\Pudding\Pudding.exe', '','',1)
 
#OA  
win32api.ShellExecute(0, 'open', r'C:\Program Files\Tongda\ispirit\ispiritPro.exe', '','',1)
 
#QQ  
win32api.ShellExecute(0, 'open', r'D:\QQ\Bin\QQ.exe', '','',1)
 
#......
#                  
アプリケーションスクリプトを終了

#coding=utf-8
 
import os
 
#  QQ  
os.system("taskkill /F /IM QQ.exe")
 
#        
os.system("taskkill /F /IM Pudding.exe")
 
#  OA  
os.system("taskkill /F /IM ispiritPro.exe")
 
#......
#                  
4.exeを作成する
最後にこの二つのスクリプトをexeプログラムファイルに作成して、デスクトップに置いて、毎回便利に使えます。
pythonシステムコマンドを呼び出し、コマンドラインを実行します。
pythonでシステムコマンドを呼び出す方法はまだ多いです。os/command/subprocessモジュールには全部方法があります。
他の言語(ビルの主な人が使った言葉も多くない)と比べて:
PHP:exec()、system()、全体的に感じが悪いので、ブロックが苦しいです。
java:モジュールの機能はとても強くて、ないのは言って、機能はpythonのsubprocessととても似ています。
(1)os.system
一つのサブ端末でシステムコマンドを実行するだけで、コマンド実行後のリターン情報を取得できません。
(2)os.popen
この方法はコマンドを実行するだけでなく、実行後の情報オブジェクトに戻ります。
(3)モジュールの使用
よく使う方法は主に2つあります。ゲトプロとget statusoutput。
(4)モジュールsubprocessを使用する
やはりsubprocessが一番強くて、多くの機能を実現できます。
例えば、最近会ったプロジェクトは、pythonでshellコマンドを呼び出す必要があります。また、呼び出し情報を取得し、監視呼び出しプロセス、タイムアウト終了など、呼び出しプロセスがブロックされず、対話もできます。
使用方法(ファイル変換例):

time_start = time.time()
cmd = "pdf2htmlEX --no-drm 1 --embed-css 0 --embed-image 0 --embed-font 0 --split-pages 1 --fit-width 748 --css-filename html.css --dest-dir %s --embed-external-font 0 --auto-hint 1 %s" % (html_output_folder, src_file)
  cmd_list = cmd.split(" ")
  sub2 = subprocess.Popen(cmd_list)
  i = 0
  while 1:
    ret1 = subprocess.Popen.poll(sub2)
    if ret1 == 0:
      time_end = time.time()
      time_take = int(time_end - time_start + 0.5)
      with global_value_lock:
        success_ids[param[2]] = time_take
      print sub2.pid,'end'
      break
    elif ret1 is None:
      print sub2.pid, 'running'
      if i >= max_check_time:
        time_end = time.time()
        time_take = int(time_end - time_start + 0.5)
        with global_value_lock:
          timeout_ids[param[2]] = time_take
        sub2.kill()
        log_insert("%s%s%s" % (log_dir(output_folder), os.sep, "convert_log.txt"), src_file, "Timeout_Error", 'None')
        print "*****************Timeout_Error*****************"
        break
      time.sleep(check_time)
    else:
      time_end = time.time()
      time_take = int(time_end - time_start + 0.5)
      with global_value_lock:
        converterror_ids[param[2]] = time_take
      log_insert("%s%s%s" % (log_dir(output_folder), os.sep, "convert_log.txt"), src_file, "Process_Term_Error", str(ret1))
      print sub2.pid,'term', ret1, ret1
      break
    i += 1
!注意:cmd_ではなくcmdを直接使うとき。リスト時に得られたpidはpdf 2ではなく、その父親のプロセスです。
以下はPopenの基本的な使い方です。
Popenの構造関数は以下の通りです。
subprocess.Popen(args、bufsize=0、executable=None、stdin=None、stdout=None、stder=None、preexecufn=None、close_fds=False、shell=False、cwd=None、env=None、universal_newlines=False、startuplinfo=None、creationflags=0)
パラメータargsは、プロセスの実行可能ファイルおよびパラメータを指定する文字列またはシーケンスタイプであってもよい。シーケンスタイプの場合、最初の要素は通常、実行可能ファイルのパスである。executeableパラメータを用いて実行可能ファイルのパスを明示的に指定することもできます。windowsオペレーティングシステムでは、PopenはCreateProcess()を呼び出してサブプロセスを作成し、CreateProcessは文字列パラメータを受信し、argsがシーケンスタイプであれば、システムはlist 2 cmdline()関数を通じてシーケンスタイプを文字列に変換します。
パラメータブロック:バッファを指定します。私はまだこのパラメータの具体的な意味が分かりません。各大牛が教えてくれますように。
パラメータexecutableは実行可能プログラムを指定します。通常、私たちはargsパラメータによって実行するプログラムを設定します。パラメータshellをTrueに設定すると、executableはプログラム使用のshellを指定します。windowsプラットフォームでは、デフォルトのshellはCOMSPEC環境変数によって指定されます。
パラメータstdin、stdout、stderはそれぞれプログラムの標準入力、出力、エラーハンドルを表します。彼らはPIPEであってもよく、ファイル記述子またはファイルオブジェクトであっても良いし、Noneに設定しても良いし、親プロセスからの継承を表しています。
パラメータpreexec_fnはUnixプラットフォームの下でのみ有効であり、実行可能なオブジェクトを指定して、サブプロセスが実行される前に呼び出されます。
パラメータClose_sfs:windowsプラットフォームの下で、もしclose_fdsがTrueに設定されている場合、新規に作成されたサブプロセスは、親プロセスの入力、出力、エラーパイプを引き継ぎません。私たちはcloseを使うことができません。fdsはTrueに設定し、同時にサブプロセスの標準入力、出力とエラーをリダイレクトします。
パラメータshellをtrueとすると、プログラムはshellで実行されます。
パラメータcwdは、サブルーチンの現在のディレクトリを設定します。
パラメータenvは辞書の種類で、サブルーチンの環境変数を指定します。env=Noneの場合、子プロセスの環境変数は親プロセスから継承されます。
パラメータUniversal_newlines:オペレーティングシステムによってテキストの改行が異なります。windowsでは'/r/n'で表しますが、Linuxでは'/n'を使います。このパラメータをTrueに設定すると、Pythonはこれらの改行を'/n'として扱います。
パラメータstartuplinfoとcreateion flagsはwindowsでのみ使用され、それらは下の層のCreateProcess関数に伝達され、サブプロセスのいくつかの属性を設定します。例えば、メインウィンドウの外観、プロセスの優先度などです。
subprocess.PIPE
Popenオブジェクトを作成するとき、subprocess.PIPEはstdin、stdoutまたはstderパラメータを初期化することができる。サブプロセスと通信する標準的な流れを表します。
subprocess.STDOUT
Popenオブジェクトを作成する場合は、stderパラメータを初期化し、エラーを標準出力ストリームで出力することを示します。
Popenの方法:
Popen.poll()
サブプロセスが終了したかどうかを確認するために使用します。リセットコードの属性を設定して返します。
Popen.wait()
サブプロセスの終了を待つ。リセットコードの属性を設定して返します。
Popen.co mmunicate(input=None)
サブプロセスと対話します。stdinにデータを送るか、stdoutとstderからデータを読み出す。オプションのパラメータinputは、サブプロセスに送信するパラメータを指定します。Communicate()は元のグループに戻ります。なお、プロセスのstdinを介してデータを送信したい場合、Popenオブジェクトを作成する際には、パラメータstdinはPIPEに設定されなければならない。同様に、stdoutおよびstderからデータを取得するためには、stdoutおよびstderをPIPEに設定しなければならない。
Popen.send_signal(signal)
サブプロセスに信号を送信します。
Popen.terminate()
サブプロセスを停止します。windowsプラットフォームの下で、この方法はWindows API Terminate Process()を呼び出してサブルーチンを終了します。
Popen.kill()
子プロセスを殺す。
Popen.stdin
Popenオブジェクトを作成する場合、パラメータstdinはPIPEに設定され、Popen.stdinはサブプロセス送信命令のためにファイルオブジェクトを返す。さもなければNoneに戻ります。
Popen.stdout
Popenオブジェクトを作成する場合、パラメータstdoutはPIPEに設定され、Popen.stdoutはサブプロセス送信命令のためのファイルオブジェクトに戻ります。さもなければNoneに戻ります。
Popen.stder
Popenオブジェクトを作成する場合、パラメータstdoutはPIPEに設定され、Popen.stdoutはサブプロセス送信命令のためのファイルオブジェクトに戻ります。さもなければNoneに戻ります。
Popen.pid
サブプロセスのプロセスIDを取得します。
Popen.returncode
プロセスの戻り値を取得します。プロセスがまだ終わっていないなら、Noneに戻ります。
以上のpythonでは、アプリケーションを起動し、アプリケーションを終了する方法は、すべてのコンテンツを共有するための小編集です。