Python を介して 1 つの perforce ディレクトリを同期する簡単なスクリプトを作成していますが、同期できません。その [perforce] ディレクトリでスクリプトを使用して何かを実行することはできません。そのディレクトリでp4 login、p4 syncなどのコマンドを実行する方法を教えてください。
6 に答える
perforce 用に公式にサポートされているPython APIがあります。
subprocess
p4コマンドの出力を手動で解析する代わりに、p4接続をオブジェクトとして扱い、APIを使用して操作できるため、代わりにそれを使用する必要があります。
他の引数なしで「p4 sync」を実行すると、現在のクライアントワークスペースによって現在のディレクトリにマップされたファイルが同期されます。Python スクリプトからコマンドを実行する場合、スクリプトが実際に実行されている場所を認識する必要があります。
デバッグの目的で、最初に「p4 info」を実行してみてください。現在の作業ディレクトリが表示されるだけでなく、残りの Perforce 環境の詳細も表示されます。
スクリプトを実行する場所に関係なく、常に同じディレクトリを同期させたい場合は、同期するパスを指定することを検討してください。例えば:
- デポの構文: p4 sync //depot/path/to/dir/...
- ローカル構文 (Windows): p4 sync c:\users\user\path\to\dir...
- ローカル構文 (*nix): p4 sync /home/user/path/to/dir/...
クライアント ワークスペース、ユーザーまたは perforce サーバーの構成が P4CONFIG によってディレクトリ ベースで構成されているか、P4V によって設定されている場合、これらの設定のグローバル オプションをグローバル オプションとしてコマンドに追加することができます。例えば:
- p4 -p server:1666 -c client_ws -u user sync //depot/path/to/dir/...
Python からコマンドを実行していると、P4Python スクリプト API を使用すると構成が簡単になることがあります: https://www.perforce.com/perforce/r14.2/manuals/p4script/python.programming.html
P4Python に対処したくない場合は、コマンド ラインを P4Python インターフェイスでラップする Python クラスが Perforce ワークショップに用意されています。
ActiveState Python 2.7 と P4Python プラグインを使用して、Python から Perforce コマンドを実行することに成功しました。次のような p4 定義行が必要になります。
p4Params = {'Port': "perforce_server_name:1666", \
'Pass': "mypassword", \
'User': "myname", \
'Client': "myclient"}
さらに、P4 および P4Exception ライブラリが必要です。
from P4 import P4,P4Exception
これがあれば、次の構文を使用してほとんどの Perforce コマンドを実行できます。この関数はリビジョン #0 に同期して、管理されているすべてのファイルをデポの場所 "depotPath" から削除します。
def removeWorkFiles(depotPath,p4Params):
"""Tell Perforce to remove the version files from the workspace"""
p4 = P4(client=p4Params['Client'], port=p4Params['Port'], password=p4Params['Pass'])
p4.user = p4Params['perfUser']
try:
p4.connect() # Connect to the Perforce Server
p4.run_login()
deletePath = depotPath + "#0"
p4.run("sync", "-f", deletePath) # force to version "0", ie remove from workspace
p4.disconnect()
except P4Exception:
for e in p4.errors: # Display errors
logging.error( e)
次の Perforce の P4 Python ヘルプ ページを読むことを強くお勧めします。
https://www.perforce.com/perforce/r14.2/manuals/p4script/python.programming.html
これにより、完全ではありませんが、ある程度の見通しが得られます。お役に立てれば
CMD シェルで実行できる正確な perforce コマンドを知っている場合は、os.system('cmd ') を利用できます。os.popenとsubprocess.callを調べて、同じことを行うこともできます。