一般に、シェルからこれを行う方法はありません。あなたがしなければならないことは、端末プログラム自体、またはあなたのためにそうするランチャープログラムを実行することです. そして、その方法は端末プログラムごとに異なります。
場合によってos.startfile
は、あなたが望むことをしますが、これは普遍的ではありません.
また、一般に、スクリプトへの絶対パスが実際に必要になることに注意してください。これは、新しいターミナル ウィンドウが新しいシェルを実行するため、必ずしも同じ作業ディレクトリを持っているとは限らないためです。しかし、例ではそれを無視します。
Windows cmd を使用する場合、最も簡単な方法はstart
シェル コマンドです。start
を含むコマンドライン プログラムの場合、python
新しいコマンド ウィンドウが表示されます。したがって、次のようなものです:
subprocess.call('start /wait python bb.py', shell=True)
OS X にも同様のコマンドopen
. また、これはシェル コマンドではなく実際のプログラムであるため、必要はありませんshell=True
。ただし、コマンド ライン プログラムまたはスクリプトを実行open
しても、通常、新しいターミナル ウィンドウは開きません。実際、その要点は、Finder でダブルクリックされているかのようにプログラムを実行できるようにすることです。.command ファイルでない限り、ターミナルで何かを実行することはありません。
したがって、一時的な.command
ラッパー ファイルを作成できますopen
。このようなもの(未テスト):
with tempfile.NamedTemporaryFile(suffix='.command') as f:
f.write('#!/bin/sh\npython bb.py\n')
subprocess.call(['open', '-W', f.name])
open
または、次のように Terminal.app を使用するように明示的に指示することもできます。
subprocess.call(['open', '-W', '-a', 'Terminal.app', 'python', '--args', 'bb.py'])
または、AppleEvents を介して Terminal.app をスクリプト化することもできます。例えば:
appscript.app('Terminal').do_script('python bb.py')
「do script」イベントは、新しいウィンドウを開き、その引数をコマンドとして実行します。より詳細な制御が必要な場合は、AppleScript Editor でスクリプト辞書を開いて、実行できるすべての楽しい操作を確認してください。
Linux またはその他の *nix システムでは、65,102 の異なるデスクトップ環境、ランチャー、およびターミナル プログラムがあります。それらすべてに取り組む必要がありますか?
gnome-terminal を使用すると、ターミナルを再度実行するだけで新しいウィンドウが表示され、-x
引数で初期コマンドを指定できます。
subprocess.call(['gnome-terminal', '-x', 'python bb.py'])
多くの古い端末は と互換性を持たせようとしていますがxterm
、これは と同じことを行い-e
ます。
subprocess.call(['xterm', '-e', 'python bb.py'])
subprocess.call(['rxvt', '-e', 'python bb.py'])
…など
ユーザーが使用している端末をどのように知ることができますか? 良い質問。端末のように見えるものが見つかるまで、自分から親プロセスのようなものを歩くことができます。または、誰もが持っていると仮定することもできますxterm
。または、さまざまなディストリビューションがデフォルトのターミナルをどのように構成しているかを調べて、それらすべてを検索することもできます。または…</p>