4

Pythonファイル内からbashコードを実行できるかどうか疑問に思っています。まったく別の bash ファイルを実行するという意味ではありません。1行以上の長さのbashコードを簡単に実行する方法を探しています。具体的には、今日以前に尋ねた質問から助けを得たこのコードを実行したいと思います。

shopt -s nullglob
dirs=(*/)
cd -- "${dirs[RANDOM%${#dirs[@]}]}"
4

5 に答える 5

4

文字列をshスクリプトとして実行するには (POSIX を想定):

#!/usr/bin/env python
from subprocess import check_call as x

x("""pwd
cd /
pwd""", shell=True)

コマンドを明示的に指定できます。

x(["bash", "-c", '''shopt -s nullglob
dirs=(*/)
pwd
cd -- "${dirs[RANDOM%${#dirs[@]}]}"
pwd'''])

cd注:ランダムなサブディレクトリに移動できるかどうかのみをチェックします。変更は、bash スクリプトの外部では表示されません。

あなたはbashなしでそれを行うことができます:

#!/usr/bin/env python
import os
import random

print(os.getcwd())
os.chdir(random.choice([d for d in os.listdir(os.curdir) if os.path.isdir(d)]))
print(os.getcwd())

次を使用することもできますglob

from glob import glob

randomdir = random.choice(glob("*/"))

との違いは、ドットで始まるディレクトリをフィルタリングすることos.listdir()です。手動でフィルタリングできます:glob().

randomdir = random.choice([d for d in os.listdir(os.curdir)
                           if (not d.startswith(".")) and os.path.isdir(d)])
于 2013-01-05T18:04:43.107 に答える
1

bash コードを実行することはできますが、その影響 (特にcd) はそれが実行されるサブプロセスにのみ影響するため、意味がありません。むしろ、これはすべて Python コマンドで完全に実行できます ( を参照してくださいglob)。

于 2013-01-05T17:48:14.907 に答える
1

パラメータを true に設定して、 subprocessモジュールos.systemの or 関数を使用できます。shell

プラットフォームの独立性を維持しながら、bash で行うことの多くは Python 内でも同じように簡単に行うことができることに注意してください。たとえば、最近 Windows で Python スクリプトを実行しようとしましたが、これは多くの UNIX コマンドを使用してテキストの grep などの単純なことを行っていたため、失敗しました。

于 2013-01-05T17:48:50.270 に答える
0

これを行うこともできます。

import os
os.system("system call 1")
os.system("system call 2")

(etc)

この方法でシェル スクリプトを記述し、Python の (より優れた) ループ機能と条件付き実行機能を使用できます。

于 2013-01-05T19:07:52.850 に答える
0

最良の方法は、コマンドモジュールを使用することです

例えば:

>>> import commands
>>> (status,output)=commands.getstatusoutput("ls")
>>> print(output)#print the output
>>> print(status)#print the status of executed command
于 2013-01-05T17:52:23.303 に答える