0

私は少なくとも 1 時間この問題に取り組んできましたが、今はあきらめています。あなたの貴重な助けが必要です..

私がやろうとしているのは、いくつかの引数を渡して、python スクリプト内で python スクリプトを実行することです。

これまでは、次のようにバット ファイルを使用してこれを行ってきました。

test.bat

...
SET fileName='c:\works\files\file.xml'
SET url='someurl'
SET table='tablename'
c:\Python27\python.exe "C:\Program Files (x86)\Google\google_appengine\appcfg.py" upload_data --config_file=C:\works\config.yaml --filename="%fileName%" --url="%url%" --kind="%table%"

これはうまくいきます。次に、次のように、別の Python スクリプト内でそのスクリプトを呼び出す必要があります。

test.py

...
fileName = 'c:\works\files\file.xml'
url = 'someurl'
table = 'tablename'
if(os.path.exists(fileName):
  print 'exists!'
  #launch appcfg.py here!!
else:
  print 'file missing'

ファイルは正しく見つかり、'exists!メッセージは正しく表示されますが、その python ファイルを今すぐ呼び出す方法がわかりません。これら 2 つのコマンドを試しましたが、機能しません (パスの空白が原因かもしれません)。 ? 私はそれを取り除く方法がわかりません..)

最初の試行: 失敗

os.system('c:\Python27\python.exe "C:\Program Files (x86)\Google\google_appengine\appcfg.py" upload_data --config_file=C:\works\config.yaml --filename='+fileName+' --url='+url+' --kind='+table)

2 回目の試行: 2 回失敗

subprocess.call(['c:\Python27\python.exe','"C:\Program Files (x86)\Google\google_appengine\appcfg.py" upload_data --config_file=C:\works\config.yaml --filename='+fileName+' --url='+url+' --kind='+table ])

コピー/貼り付けエラーが発生しなかったことを願っています。ポイントは、メインのpythonスクリプト内で呼び出して、非常に多くの引数を別のスクリプトに渡す方法がわからないことです..

私はあなたの手の中にいます、前もって感謝します、よろしく

4

3 に答える 3

1

他の python スクリプトをインポートしてみませんか? その後、正しい引数をメイン関数に渡すことができます。

編集:これがappcfg.py のソースです。これは、必要な機能を見つけるのに役立ちます。

編集2:ここに役立つコードがあります:

import appcfg
appcfg_globals = dict([(var, eval('appcfg.' + var))for var in dir(appcfg)])
# Insert arguments into appcfg_globals
appcfg.run_file_(appcfg.__file__, appcfg_globals)

仕組み: dir(module) は、次のように「モジュール」内のすべての変数を一覧表示します。

['__builtins__', '__doc__', '__file__', '__name__', '__package__', [...]]

しかし、次の形式の dict が必要です。

{
 '__builtins__': {[...]},
 '__doc__': [...],
 '__file__': 'C:\Program Files (x86)\Google\google_appengine\appcfg.py',
 '__name__': 'appcfg',
 '__package__': [...],
 [...]
}

そのため、eval を使用して名前に関連付けられた値を取得し、(variable_name, variable_value) のようなタプルで名前に関連付けます。dict() が残りを行います!

あとは引数を挿入するだけです。あなた自身でそれを見つけることができます !

これが機能することの証明:

my_test.py:

my_globals = globals()

Python の場合:

>>> import my_test
>>> my_test.my_globals == dict([(var, eval('my_test.' + var))for var in dir(my_test)])
True
于 2013-09-11T15:59:14.573 に答える
0

私はこのようなことをしてみます。

os.system("appcfg.py arg1 arg2 arg3")

OSドキュメントのこの部分を調べます。

幸運を。

于 2013-09-11T15:37:39.810 に答える