Tim*_*Tim 11 python scripting perl cross-platform shebang
我想知道如何使一个python脚本可移植到Linux和Windows?
我看到的一个问题是shebang.如何编写shebang以便脚本可以在windows和linux上运行?
除了shebang还有其他问题我应该知道吗?
perl脚本的解决方案是否相同?
感谢致敬!
Ale*_*lli 14
Windows将忽略shebang(毕竟,这是一个评论); 在Windows中,您需要将.py
扩展名与注册表中的Python可执行文件相关联,但是您可以完全放弃shebang,它将完全无害.
有很多部分是特定于平台的(许多只存在于Unix上,msvcrt
只在Windows上存在)所以如果你想要便携,你应该弃用那些; 一些是微妙的不同(如详细的精确行为subprocess.Popen
或mmap
) - 它都是非常先进的东西,文档将指导你那里.如果您正在执行(通过subprocess
或其他方式)外部命令,您最好确保它们存在于两个平台上,或者检查您所在的平台并在每种情况下使用不同的外部命令.
请记住始终使用/
,而不是 \
作为路径分隔符(正斜杠在两个平台中都有效,后向斜杠只在Windows中使用),并且要仔细确定您打开的每个文件是二进制还是文本.
我认为这是关于它的......
确保您不将文件和目录作为字符串处理,只需将它们与中间的斜杠连接起来即可.Perl的:
$path = File::Spec->catfile("dir1", "dir2", "file")
Run Code Online (Sandbox Code Playgroud)
请记住,Windows有卷:
($volume, $path, $file) = File::Spec->splitpath($full_path);
@directories = File::Spec->splitdir($path);
Run Code Online (Sandbox Code Playgroud)
运行其他程序时,尽量避免涉及shell.在Perl中,当您使用该system
函数运行命令时,您可以轻松地弄错:
$full_command = 'C:\Documents and Settings/program.exe "arg1" arg2'; # spaces alert!
system($full_command);
Run Code Online (Sandbox Code Playgroud)
相反,您可以使用列表作为参数运行系统:可执行文件和参数是单独的字符串.在这种情况下,shell不会涉及,并且您不会遇到有关shell转义或文件名中的空格的问题.
system('C:\Documents and Settings/program.exe', 'arg1', 'arg2');
Run Code Online (Sandbox Code Playgroud)