0

こんにちは、私はPythonとシェルスクリプトを学んでおり、GUIにはwxpythonを使用しています。

いくつかの操作を行う自動化ツールを作成すると言いましたが、deb の作成もその 1 つです。

deb作成の場合、コマンドは次のとおりです。

              ./myfile -u username

私は os.Popen 、 os.system 、 subprocess.Popen 、 subprocess.call を試しました。しかし、「-u」が有効になるたびに使用することはできません。「-u」は必須です。「-u」を変数に格納してみましたが、それは渡されましたが、まだ使用されていません。

正確な方法または私が間違っている場所を教えてください

エラーメッセージはありませんが、「myfile」の出力は、コマンドで「-u」が指定されていないことを示しています。

コードは次のとおりです。

   1. cmd = ['./myfile', '-u', 'username']
      Popen(cmd,shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)

   2. user = "-u" 
      name = "username"
      sbprocess.call("./myfile %s %s" %(str(user),str(name)), shell=True)

「os」コマンドを使用した同種のものも

4

2 に答える 2

1

docsからshell=True最初のパラメーターの意味が変更されるため、質問の最初のコード例は間違ったコマンドを渡します。subprocess

を使用するUnixshell=Trueでは、シェルのデフォルトは/bin/shです。args が文字列の場合、その文字列はシェルを介して実行するコマンドを指定します。..[をちょきちょきと切る]..

args がシーケンスの場合、最初の項目はコマンド文字列を指定し、追加の項目はシェル自体への追加の引数として扱われます。つまり、Popen は以下と同等のことを行います。

Popen(['/bin/sh', '-c', args[0], args[1], ...])

次のコマンドがシェルで機能する場合、質問の 2 番目のコード例が機能するはずです。

$ /bin/sh -c './myfile -u username'

コマンドを修正するには、不要な可能性があるものを省略して次shell=Trueを使用できcheck_call()ます。

import subprocess

subprocess.check_call(["./myfile", "-u", "username"])
于 2013-06-08T07:36:35.667 に答える