簡體   English   中英

如何使python或perl腳本可移植到linux和windows?

[英]how to make a python or perl script portable to both linux and windows?

我想知道如何使一個python腳本可移植到Linux和Windows?

我看到的一個問題是shebang。 如何編寫shebang以便腳本可以在windows和linux上運行?

除了shebang還有其他問題我應該知道嗎?

perl腳本的解決方案是否相同?

謝謝並恭祝安康!

Windows將忽略shebang(畢竟,這是一個評論); 在Windows中,您需要將.py擴展名與注冊表中的Python可執行文件相關聯,但是您可以完全放棄shebang,它將完全無害。

有許多部分是特定於平台的(很多只存在於Unix上, msvcrt僅存在於Windows上)所以如果你想要便攜,你應該msvcrt那些; 有些是微妙的不同(例如subprocess.Popenmmap的詳細精確行為) - 它們都是非常先進的東西,文檔會引導你到那里。 如果您正在執行(通過subprocess進程或其他方式)外部命令,您最好確保它們存在於兩個平台上,或者檢查您所在的平台並在每種情況下使用不同的外部命令。

記住要始終使用/而不是 \\ ,作為路徑分隔符(正斜杠在兩個平台中都有效,向后斜杠只在windows中使用),並且要仔細確定您打開的每個文件是二進制還是文本。

我認為這是關於它的......

確保您不將文件和目錄作為字符串處理,只需將它們與中間的斜杠連接起來即可。 Perl的:

$path = File::Spec->catfile("dir1", "dir2", "file")

請記住,Windows有卷:

($volume, $path, $file) = File::Spec->splitpath($full_path);
@directories = File::Spec->splitdir($path);

運行其他程序時,盡量避免涉及shell。 在Perl中,當您使用system函數運行命令時,您可以輕松地弄錯:

$full_command = 'C:\Documents and Settings/program.exe "arg1" arg2'; # spaces alert!
system($full_command);

相反,您可以使用列表作為參數運行系統:可執行文件和參數是單獨的字符串。 在這種情況下,shell不會涉及,並且您不會遇到有關shell轉義或文件名中的空格的問題。

system('C:\Documents and Settings/program.exe', 'arg1', 'arg2');

perlport手冊中記錄了許多可移植性尼特。

shebang系列將被解釋為Perl或Python的評論。 唯一賦予它特殊含義的是UNIX / Linux shell; 它在Windows上被忽略了。 Windows知道哪個解釋器用於運行文件的方式是通過注冊表中的文件關聯,完全不同的機制。

我不太了解這個問題的Python方法,所以我不會。

Perl中的大多數東西都可以正常工作。 有一些易於避免的陷阱。

以下是我在使用Win32 Perl時遇到的一些事情:

  • 使用3參數形式的open 兩個參數形式可能會出現路徑中的空格問題。 (無論如何你應該已經這樣做了。)
  • 使用模塊時,請確保外殼正確。 use Warnings; 似乎會起作用,但實際上它會失敗。
  • select僅適用於Windows下的實際套接字。 你不能在任何其他類型的句柄上使用它。
  • 使用File::Spec管理文件路徑。
  • 當您打開文件句柄時, CRLF將在讀取句柄時自動轉換為LF行結尾。 LF在寫入時更改為CRLF 如果要避免這種情況, binmode在句柄上使用binmode以防止轉換。
  • 如果需要通過shell傳遞參數,請在每個參數周圍加上雙引號。 這將防止由於文件名中的空格而導致的錯誤。

有關各個功能的更多信息,請參閱perlport

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM