15

モジュールに関するいくつかの質問を見つけましたが、より一般的な問題は、私が管理したと思われる引数リストを正しく取得しているようです (最終的に)

コマンドラインでこのような入力を期待するプログラムを実行しようとしていますが、

fits2ndf in out

「in」は変換するファイルのファイルパスで、「out」は結果を保存するパスとファイル名です。

したがって、サブプロセスを使用して、

subprocess.call(["fits2ndf","/media/tom_hdd/Transfer/reference.fits","/media/tom_hdd/Transfer/reference.sdf"])

これにより、

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

設定shell=TRUE(これは悪いことだとわかっています)でも同じ結果が得られます。関連性があるかどうかはわかりませんが、tcsh を使用しています。助言がありますか?


質問に応じて編集

PATHを永続的に設定していませんがfits2ndf、使用して初期化するプログラムのパッケージの一部です

% tcsh
% setenv STARLINK_DIR  /home/tomq/star-kapuahi
% source $STARLINK_DIR/etc/login
% source $STARLINK_DIR/etc/cshrc

通常、フルパスを指定せずに任意のディレクトリ内から機能します。

4

2 に答える 2

13

which fits2ndfFits2ndf のパスが表示されます。

その後、指定されたフルパスをコードに書き込むことができ、動作するはずです。

元:

~$ which mv
/bin/mv

私のpythonコード:

import subprocess

subprocess.call(["/bin/mv","/tmp/a","/tmp/b"])
于 2012-12-09T11:23:40.767 に答える
0

のスペースを削除したい場合があります" /media/tom_hdd/Transfer/reference.sdf"

また、次のように、すべてを 1 つの文字列にまとめてみてください。"fits2ndf /media/tom_hdd/Transfer/reference.fits /media/tom_hdd/Transfer/reference.sdf"

正確な方向を指していることを確認してください。

于 2012-12-09T10:59:40.097 に答える