2017-01-14 29 views
1

Windows 8マシンでコマンドプロンプトからPythonからAbaqusスクリプトを実行しようとしています。Pythonスクリプトから起動すると、abacusジョブが完了するのを待ちます。

問題は、前進する前にAbaqusジョブが完了するまでPythonスクリプトを待つことができないということです。以下は

私が試してみましたいくつかのコードを1つずつです:

os.popen('abaqus job=plate ask_delete=OFF') 
os.system('abaqus job=plate ask_delete=OFF') 
os.system('abaqus job=plate ask_delete=OFF') 
subprocess.call('abaqus job=plate ask_delete=OFF',shell=True) 
subprocess.check_call('abaqus job=plate ask_delete=OFF',shell=True) 

私はまた、このようなサブプロセスツールの後にwaitコマンドを使用して試してみました:

p1 = subprocess.check_call('abaqus job=plate ask_delete=OFF',shell=True) 
p1.wait() 

しかし、私はエラーを取得する:AttributeError: 'int' object has no attribute 'wait'を。

time.sleep()を使用したくない場合は、コードでかなりのダウンタイムが発生します。私はPython 3.5.2とAnaconda 4.2.0(64-bit)を使用しています。

答えて

5

「対話型」というabaqusキーワードを含める必要があります。例えば

abaqus myjob=bob1 ask_delete=off interactive

それ以外の場合は、バックグラウンドで実行され、すべての出力もbob1.log になり、ABAQUSジョブを実行している自動化するために使用することができABAQUSのインストールで組み込みPython環境があります。この「abaqus」Pythonを使用すると、ジョブ制御と監視のオプションが増えます

+0

ありがとう、私はコードをsubprocess.call( 'abaqus job = plate ask_delete = OFF interactive'、shell = True)として実行しました。私はAbaqusにPythonモジュールがあることを知っていますが、Pythonバージョンの不一致のために、.inpファイルを更新してからジョブを送信するだけのシンプルさが好きです。 –

2

両方の機能call(...)check_call(...)は、コマンドが完了するまでデフォルトで待機します。 デバッグのために、Popenでコマンドを呼び出し、フルパス 'C:\ ... \ abaqus.exe ...'を指定して 'abaqus'を実行します。

import subprocess 

cmd = subprocess.Popen('abaqus job=plate ask_delete=OFF', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 
out, err = cmd.communicate() 
code = cmd.returncode 

print(code) # should 0 to indicate the command run successfully 
print(out) # what was piped to stdout 
print(err) # what was piped to stderr 
+0

Maurice、あなたのコードをそのままコピーして、PythonスクリプトはAbaqusジョブが完了するまで待ちます。これは、cmd.communicate()コマンドがスクリプトを保持しているからです。しかし、あなたのコメントは、問題をデバッグしようとしているように聞こえますが、あなたがこれを解決策として意図しているかどうかを確認したいだけです。 –

+0

これはうまくいきました。これは解決策として意味されていましたが、個人的に私はPopenが正しいパラメータで最も好きです。 –

関連する問題