0

私は(cmdモジュールを使用して)Pythonでシェルを作成しました。このシェルを使用すると、コマンドに関する特定の情報がectを実行します。テキストファイルに出力されます。bash シェルでテキスト ファイルを表示するためのエイリアスを作成するコードを書きたいと思います (たとえば、次のコマンドを実行したかのように: alias latest.trc='less <path to file> 現在の最善の努力は次のとおりです。

x="alias %s = 'less %s'" % (<alias name>, <path>)
y=shlex.split(x)
atexit.register(subprocess.call, y)

これは、x="echo 'bye'" の場合など、終了時にいくつかのコマンドを実行するために機能しますが、エラーが発生します

OSError: [Errno 2] No such file or directory

入力しているパスは確かに有効で、コマンド ラインから x を直接実行すると機能します。

私のコードでエラーが発生する理由、または同じ効果を達成するためのより良い方法についての助けをいただければ幸いです。

4

1 に答える 1

1

実行可能ファイルではなくコマンドでaliasあるため、エラーが発生します。内でbash実行する必要があります:subprocess.callshell

import subprocess                                                              
import atexit                                                                  
import shlex                                                                   

x="alias %s = 'less %s'" % ('a', 'whatever')                                   
y=shlex.split(x)                                                               
atexit.register(lambda args: subprocess.call(args, shell=True), y)             

ただし、サブプロセスが新しいプロセスを生成するという事実を考えると、実行される環境に加えられた変更は終了時に失われます。

代わりに、これらすべてのエイリアスを配置するファイルを作成し、それらを使用する必要があるときに手動でソースを作成することをお勧めします。

于 2012-08-10T10:06:46.887 に答える