2017-03-10 7 views
1

私は大量の学生のPythonプロジェクトをテストしています。私は別のファイル、例えばmydoctest.rstと呼ばれるファイルにdoctestを作成しました。bash forループを使用してサブディレクトリにある別のファイルからPython doctestを実行する

doctestの輸入の学生のプロジェクトのモジュールの最初の行:

:私は学生のプロジェクトと同じディレクトリからそれを呼び出すとき

doctestのが正常に動作

プロジェクト3インポートのfunctionnameから

studentA$ python3 -m doctest mydoctest.rst 

私がしたいのは、各サブディレクトリに対して上記のことを行うためのbash for loopコマンドを使用しているからですありがとう。

parentdirectory$ for d in *; do python3 -m doctest "$d/"mydoctest.rst; done 

しかし、各サブディレクトリではなく現在のディレクトリでモジュールを探します。

do python3 -m doctestを実行する前に、最初に各サブディレクトリにcdする方法はありますか?

私の現在の回避策(これは満足できません)は次のとおりです。 for d * cd "$ d"を実行します。 python3 -m doctest mydoctest.rst; CD ..;

答えて

1

これは

for d in *; do (cd "$d" ; python3 -m doctest mydoctest.rst); done 
+0

';'と '&&'を使う違いは何ですか?彼らは同じことをするようです。 – egunawan

+0

&&は新しいスレッド(ただし同じ環境)の後でコマンドを起動し、起動前にコマンドが完了するという保証はありません。 「CD」のような小さなものでは、これは時間内に完了している可能性があります。 – user2381984

+0

私はあなたが '&'. ;について話していると思いますが、それは最初にコマンドを実行します。その後のコマンド。 &彼らはお互いを待つことなくすぐに両方を行います。 &&は論理演算子で、最初のコマンドを評価し、falseの場合は式全体が偽であることを知るので、2番目のコマンドは評価されません。最初のコマンドが真であれば、それも真であるかどうかを見るために2番目のコマンドを評価します。 – 00prometheus

2

を行って、私はサブシェル(...)cdを使用することをお勧め:

for d in *; do (cd "$d" && python3 -m doctest mydoctest.rst); done 
+0

どのように私は答えを受け入れるんが動作するはず? – egunawan

+0

私はあなたの答えを取って、それを私の採点プロセスのために働かせました。 do(cd "$ d"; python3 -m doctest doctest3.rst; echo $ PWD); done' – egunawan

+1

@egunawan "up/down vote"ボタンの下の "tick"マークをクリックするだけです。 –

関連する問題