我正在尝试了解OS概念和Python库。
我遇到了Python文档https://docs.python.org/3/library/signal.html链接中提到的特定示例,该示例在Windows上不适合我。
import signal, os
def handler(signum, frame):
print('Signal handler called with signal', signum)
raise OSError("Couldn't open device!")
# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)
# This open() may hang indefinitely
fd = os.open('/dev/ttyS0', os.O_RDWR)
signal.alarm(0) # Disable the alarm
Run Code Online (Sandbox Code Playgroud)
singal.SIGALRM在Windows上不起作用有任何特定原因吗?
自动完成甚至在Pycharm IDE中显示SIGALRM(我假设如果显示这样的变量或函数)。
但是,当我运行该程序时,它在Windows上给了我以下错误。我还没有在Linux上检查过。
Traceback (most recent call last):
File "C:/Users/preddy53/Desktop/syst.py", line 8, in <module>
signal.signal(signal.SIGALRM, handler)
AttributeError: module 'signal' has no attribute 'SIGALRM'
Run Code Online (Sandbox Code Playgroud)
我在哪里做错了?它仅适用于操作系统吗?
我正在努力将Perl cgi脚本转换为Python.
在脚本里面,我遇到了下面的代码,我不明白.
帮我解决这个问题.
my $p = $0;
$p =~ s|.*/||;
Run Code Online (Sandbox Code Playgroud)
我明白,my $p = $0;
将脚本文件的绝对路径+名称分配给变量p.
第二行将执行正则表达式替换,并仅提供没有路径的文件名.
但我不明白的是那些|.*/||
之后s
.
我搜索了很多资源但却不明白它的作用.
为了给我提供脚本名称,实际上要做的是什么?
我是shell脚本和Perl的新手,并尝试将Perl脚本转换为Python脚本.
我遇到了以下代码片段,我并不清楚.
sub sigalrm_handler
{
printf (STDOUT "Timeout: Timeout Error Occured.\n");
kill (1, $proc);
exit (1);
}
sub main
{
...
...
$SIG{'ALRM'} = \&sigalrm_handler;
alarm ($ARGV[0]);
shift @ARGV;
$proc = spawn (@ARGV);
wait;
exit ($?);
...
...
}
main ()
Run Code Online (Sandbox Code Playgroud)
这个$SIG{'ALRM'}
命令要做什么?它是Python中的某种特殊关键字.
我已经看到很多来源$SIGALRM
正在使用,但没有找到任何来源他们提到为什么它被使用$SIGALRM
只是为什么不是其他名称.
$SIG{'ALRM'}
在这项任务之后,这个价值会是什么?
任何人都可以帮我理解这段代码吗?