Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么是Perl';s-Sx命令行选项?_Python_Python 3.x_Python 2.7_Perl_Scripting - Fatal编程技术网

Python 什么是Perl';s-Sx命令行选项?

Python 什么是Perl';s-Sx命令行选项?,python,python-3.x,python-2.7,perl,scripting,Python,Python 3.x,Python 2.7,Perl,Scripting,我的任务是将Perl脚本转换为Python 我对Perl非常陌生,了解Perl时遇到了一个命令行选项,它是-Sx Perl中为这些参数提供了很好的文档。但是在python中没有太多关于这方面的文档(在python官方网站上没有找到太多信息) 我的问题是,对于Perl和Python,这些命令行选项-Sx是否相同 他们在这两方面完成了相同的任务吗?我在评论中提出的问题: 你有没有想过,如果你问的那一点外壳对你正在做的事情真的是必要的?或者你只是试图盲目地翻译而不了解事情在做什么 我很确定答案分别是否

我的任务是将Perl脚本转换为Python

我对Perl非常陌生,了解Perl时遇到了一个命令行选项,它是
-Sx

Perl中为这些参数提供了很好的文档。但是在python中没有太多关于这方面的文档(在python官方网站上没有找到太多信息)

我的问题是,对于PerlPython,这些命令行选项
-Sx
是否相同


他们在这两方面完成了相同的任务吗?

我在评论中提出的问题:

你有没有想过,如果你问的那一点外壳对你正在做的事情真的是必要的?或者你只是试图盲目地翻译而不了解事情在做什么

我很确定答案分别是否定的和肯定的。当您试图将代码从一种语言翻译到另一种语言时,这不是一个好地方;你应该理解原版中发生了什么,并让你的新版本以最适合新语言的方式做同样的事情,不要陷入盲目引导盲货崇拜代码的陷阱,在这种情况下,你不知道发生了什么,也不知道如何修复它,但它总是不起作用

如果你以前从未见过这样的源程序,那么根据你的源程序,你试图翻译的源程序是相当混乱的,这是没有帮助的

您有一个shell脚本,它的唯一功能是使用一个程序运行perl,该程序的源代码直接嵌入到shell脚本中。这样做的原因是让真正的脚本在同一台计算机上的不同perl安装下运行,具体取决于环境(就我个人而言,我会将perl代码放在它自己的单独文件中,而不是试图巧妙地将其直接放在shell脚本中;示例采用这种方法)。这是python版本需要关注的问题吗?我猜可能不是(如果是的话,那就研究一下pythonic的方法,而不是晦涩难懂的perlish方法)。这意味着另一个问题的答案

你确定你甚至需要等价的[S和-x]吗


是的,我想你不会。我认为您应该将其保留为纯python,使这些选项所做的事情变得无关紧要。

以下代码片段用于支持早于
python
存在的古老系统:

#!/bin/sh
exec perl -Sx $0 ${1+"$@"}
   if 0;
现在,您正在处理一个卑鄙和修改过的版本,但是使用它没有任何意义。如果调用者想要使用特定的
perl
,他们应该使用
“$perl”脚本
,而不是依赖
script
来使用
$perl

因此,Perl脚本应该使用以下内容:

#!/usr/bin/env perl

因此,Python脚本应该使用以下内容:

#!/usr/bin/env python


-Sx
选项有什么作用?两个不同的选项<代码>-S和
-x
执行两种不同的操作。您是否阅读了之前提供给您链接的文档以了解它们的功能?您是否查看了Python文档以查看是否存在任何等价物?你确定你需要等价物吗?你有没有想过,如果你问的那一点外壳对你正在做的事情真的是必要的?或者你只是试图盲目地翻译而不了解事情在做什么?(我不建议last)-S在路径变量中搜索脚本-x提到要执行的实际脚本从以
#开头的行开始
你是说你看了Python文档说“跳过源代码的第一行”和Perl文档说“前导垃圾将被丢弃,直到以#!开头并包含字符串“Perl”的第一行。该行上任何有意义的开关都将被应用。”,你仍然不知道这些文档是否描述了相同的功能?不,实际上并不需要-Sx。但是,如果我将python代码放在同一个shell脚本中,脚本将以相同的方式执行。我认为最好将整个python代码放在另一个脚本文件中,并从shell脚本文件调用该文件。我们能做到吗?
#!/usr/bin/env python
#!/path/to/the/installing/python