2

Python 2.5.5 のソフトウェアがあります。Python 2.7.5 でスクリプトを開始し、スクリプトを続行するコマンドを送信したいと考えています。

使ってみた

#!python2.7.5

およびhttp://redsymbol.net/articles/env-and-python-scripts-version/

しかし、私はそれを機能させることができません... 私のpython 2.5.5では、スクリプトを execfile("c:/script/test.py") として実行できます

問題は、2.7.5 にモジュール comtypes とその他のいくつかがあることです。2.5.5にインストールする方法がわからないので、別のスクリプトを開始してpython27で実行しようとしています。プログラムの負荷を軽減したいからです。2 つの重いタスクを実行する必要があります。2 番目のタスクは comptypes を必要とするタスクであるため、それを外部シェル/アプリに送信すると完璧なトリックが実行されます。それを行う方法はありますか?

run("C:/Python27/python.exe % C:/script/test,py") と入力できたらいいのにと思います

ありがとさよなら。

少し更新。走ろうとする

import os 
os.system("\"C:\Python27\python.exe\" D:\test\runTest.py")

しかし、インポートエラー:サイトという名前のモジュールがありません...これは、外部シェルから実行すると機能しますが、ここからは機能しません:(

そこで、今回はモジュールを python に追加する別のアプローチを試みました... いずれにせよ、これを実行します:

import os 
import sys
sys.path.append("C:/python27")
sys.path.append("C:/Python27/libs")
sys.path.append("C:/Python27/Lib")
sys.path.append("C:/Python27/Lib/logging")
sys.path.append("C:/Python27/Lib/site-packages")
sys.path.append("C:/Python27/Lib/ctypes")
sys.path.append("C:/Python27/DLLs")    
import PyQt4
print PyQt4   
import comtypes
import logging

しかし、C エラーでクラッシュします... ランタイム エラー : プログラム: c:\Pr... R6034 アプリケーションが C ランタイム ライブラリを正しくロードしようとしました。かくかくしかじか....

どうすればインポートできますか? たぶん、インポートできれば、別のpythonを起動するのではなく、アプリから直接実行できます...

Traceback (most recent call last):
  File "<string>", line 18, in <module>
  File "C:\Python27\Lib\site-packages\comtypes\__init__.py", line 22, in <module>
    from ctypes import *
  File "C:\Python27\Lib\ctypes\__init__.py", line 10, in <module>
    from _ctypes import Union, Structure, Array
ImportError: DLL load failed: A dynamic link library (DLL) initialization routine failed.

isseu の別の更新

だから私は今走る

import os
os.system("start cmd {D:\test\runTest.py}")

今、これは機能し、彼はディレクトリとして c:\Python27 で CMD を開きますが、ファイルを実行しません...修正方法はありますか?

4

1 に答える 1

0

あまりエスケープする必要がないように、「生の」文字列を使用してください。バックスラッシュは生の文字列を除いてエスケープ文字と見なされるため、バックスラッシュがコードを壊していたと思います。

また、subprocessモジュールを使用します。安全なコマンド文字列を手動で作成することを簡単に回避できます (モジュールがそれを処理します)。必要なのは、引数のリストを渡すことだけです。

コードは次のようになります。

import subprocess 

proc = subprocess.Popen([r"C:\Python27\python.exe", r"D:\test\runTest.py"])

# then either do this
proc.wait()  # wait until the process finishes

# or this
while True:
    # NOTE: do something else here

    # poll the process until it is done
    if proc.poll() is not None:
        break  # break out of loop

ここで Python 2 のサブプロセス ドキュメントを参照してください。Python 2.5 の後に機能が追加されたかどうかを必ず確認してください (2.5 のドキュメントはオンラインで入手できなくなりました)。

アップデート:

2.5 のコードで Python 2.7 のライブラリとモジュールを使用しようとしていることに気付きました。2.5 以降に追加された新機能のため、これはおそらく機能しません。しかし、2.7 を機能させるにはどうすればよいか考えさせられました。

Python2.7 インストールでライブラリが見つからない可能性があります。これがおそらくエラーが発生する理由ですImport Error : no module named site。上記のようなことを行い、サブプロセスを開始するPYTHONPATHに環境変数を次のように変更できます。

import os
import subprocess 

paths = [r"C:\python27", r"C:\python27\libs", r"C:\python27\Lib\site-packages", r"C:\python27\DLLs"]
paths += os.environ.get('PYTHONPATH', '').split(os.pathsep)

env27 = dict(os.environ)
env27['PYTHONPATH'] = os.pathsep.join(paths)

proc = subprocess.Popen([r"C:\Python27\python.exe", r"D:\test\runTest.py"], env=env27)
于 2015-11-30T18:08:50.513 に答える