3

.warファイルをダウンロードして、変数で指定されたパスに配置するPythonコードがありますpath

ここで、その戦争から特定のフォルダーに特定のファイルを抽出したいと思います。

しかし、私はここで打たれました:

os.system(jar -xvf /*how to give the path varible here*/  js/pay.js)

path変数をos.systemコマンドに渡す方法がわかりません。

私はPythonを初めて使用するので、親切に手伝ってください。

4

3 に答える 3

5

本当に を使用したい場合os.systemは、シェル コマンド ラインが文字列として渡され、任意の文字列を渡すことができます。そう:

os.system('jar -xvf "' + pathvariable + '" js/pay.js)

{}または、または%sフォーマットなどを使用できます。

ただし、おそらく使用したくないでしょうos.system

まず、他のプログラムを実行したい場合は、ほとんどの場合、subprocessモジュールを使用する方が適切です。例えば:

subprocess.check_call(['jar', '-xvf', pathvariable, 'js/pay.js'])

ご覧のとおり、文字列をまとめる方法を考え出す代わりに、引数のリストを渡すことができます (そして、エスケープや引用などの混乱に対処します)。他にも多くの利点があり、主にドキュメント自体に記載されています。

warただし、おそらくツールをまったく実行したくないでしょう。Jimhark が言うように、WAR ファイルは特別な種類のJAR ファイルであり、これは特別な種類のZIP ファイルです。それらを作成するには、通常は JAR/WAR 固有のツールを使用します (レイアウトを確認する、マニフェストが ZIP ディレクトリの最初のエントリであることを確認する、パッケージの署名に注意するなどの必要があります)。それらの場合、どの ZIP ツールも機能します。また、Python には ZIP サポートが組み込まれています。やりたいことは、おそらく次のように簡単です。

import zipfile
with zipfile.ZipFile(pathvariable, 'r') as zf:
    zf.extract('js/pay.js', destinationpathvariable)

ZipFileIIRC、2.7 および 3.2+のステートメントでのみ直接使用できるwithため、たとえば 2.6 または 3.1 を使用している場合は、間接的に使用する必要があります。

from contextlib import closing
import zipfile
with closing(zipfile.ZipFile(pathvariable, 'r')) as zf:
    zf.extract('js/pay.js', destinationpathvariable)

または、これが終了するとすぐに終了する簡単で汚いスクリプトである場合は、次の方法で回避できます。

import zipfile
zf = zipfile.ZipFile(pathvariable, 'r')
zf.extract('js/pay.js', destinationpathvariable)

しかしwith、それは良い習慣なので、可能な限り常にステートメントを使用するようにしています。

于 2012-12-10T09:34:33.430 に答える
3

warファイルはファイルの一種ではありませんzipか? Python はzipfileをサポートしています (ドキュメント ページへのリンクをクリックしてください)。

于 2012-12-10T09:27:01.320 に答える
0

os.environ を使用できます。これにはすべての環境変数が保持されます。これは辞書なので、次のように使用できます。

pypath = os.environ['PYTHONPATH']

これが一般的な python 変数である場合は、次のように使用します。

var1 = 'pause'
os.system('@echo & %s' % var1)
于 2012-12-10T09:27:51.770 に答える