ポータブル ビルディング フレームワークを開発しています。Linux では、フレームワークは完全に機能します。ただし、Windows では、フレームワークはスクリプトを実行できません。Windows では実行のみが許可さ*.exe
れます*.com
。
質問: 次の実行可能ファイル (*.exe
または*.com
)はありますか?
- 拡張子を除いて同じファイル名を持つファイルを読み込みます
.exe
(bar.py.exe
->bar.py
) - 同じディレクトリでこのファイルを検索します (
C:\dir\bar.py.exe
->C:\dir\bar.py
) - ファイルのシバンを解析します (
bar.py
->#!/usr/bin/python
) - インタプリタを実行します (
python
) - スクリプトの名前 (
C:\dir\bar.py
または/c/dir/bar.py
または/cygdrive/c/dir/bar.py
)を渡します - コマンドライン パラメータも渡します
そのようなプロジェクトを見つける方法がわかりません...
私の問題をよりよく理解するための詳細を以下に示します。
詳細:
私の構築フレームワークはAntに基づいています:
<target name="repo.init">
<exec executable="repo" dir="${dir}">
<arg value="init" />
<arg value="-u" />
<arg value="${url}" />
</exec>
</target>
Windows では、Ant (java) は実行可能ファイルを見つけることができませんrepo
。
Windows のせいで Ant スクリプトを台無しにしたくありません。
<target name="repo.init">
<exec executable="python" dir="${dir}">
<arg value="repo" />
<arg value="init" />
<arg value="-u" />
<arg value="${url}" />
</exec>
</target>
したがって、pythonスクリプトを実行するバッチスクリプトを試みました:
$ dir
2013-09-23 10:30 738 repo
2013-09-23 10:31 23 repo.bat
$ type repo.bat
python %~dp0/repo %*
しかし、同じエラー!私の同僚はcmd
、いつAntからバッチファイルを実行するかを指定しています:(
<target name="repo.init">
<exec executable="cmd" dir="${dir}">
<arg value="/c" />
<arg value="repo.bat"/>
<arg value="init" />
<arg value="-u" />
<arg value="${url}" />
</exec>
</target>
私の問題は、外部スクリプトを組み合わせたさまざまなプロジェクトで一般的であるため、エレガントなソリューションが既に実装されているかどうか疑問に思っています...
スクリプトと同じ名前の実行可能ファイルを使用できます。この実行可能ファイルが実行されると、同じディレクトリにあるスクリプトが読み取られ、シバンが解析され、指定されたインタープリターを使用してこのスクリプトが実行されます。
デモ:
C:\dir> dir
Volume in drive C is OSDisk
Volume Serial Number is 56A4-E980
Directory of C:\dir
23/09/2013 17:19 <DIR> .
23/09/2013 17:19 <DIR> ..
23/09/2013 17:15 23 535 repo
23/09/2013 17:25 89 521 repo.exe
2 File(s) 113 056 bytes
2 Dir(s) 122 670 903 296 bytes free
C:\dir> head -1 repo
Unknown option: 1
[...]
C:\dir> powershell -command "& {get-content repo -totalcount 1}"
#!/usr/bin/env python
C:\dir> repo.exe arg1 arg2
[... --> execute "python C:\dir\repo arg1 arg2" ...]
これは簡単に実装できます (たとえば、 を使用CreateProcess()
)。しかし、私はすでに開発された同様のツールを再利用したいと考えています。
この問題を解決する他のアイデアを受け入れます...