LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 853|回复: 5

python脚本的执行权限问题

[复制链接]
发表于 2006-12-4 09:49:31 | 显示全部楼层 |阅读模式
写了两个测试用程序,发现一个问题:
python脚本好像chmod加S和不加S没有作用……如何才能解决这个问题呢?

[php]
#!/usr/bin/python
#Filename:test.py

import fcntl,time

KIOCSOUND = 0x00004B2F
CLOCK_TICK_RATE = 1193180

console_fd = open('/dev/console','r'+'w')
fcntl.ioctl(console_fd,KIOCSOUND,CLOCK_TICK_RATE/440)
time.sleep(0.01)
fcntl.ioctl(console_fd,KIOCSOUND,0)
[/php]

[php]
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>

int main()
{
        int fd = open("/dev/console",O_WRONLY);
        ioctl(fd,0x00004B2F,1193180/6000);
        sleep(0.1);
        ioctl(fd,0x00004B2F,0);
}

[/php]
 楼主| 发表于 2006-12-4 09:50:21 | 显示全部楼层
理想中的权限”应该是:
-rwsr-xr-- 1 root audio 7.9K 2006-09-13 10:07 myprog[c / py]
回复 支持 反对

使用道具 举报

发表于 2006-12-5 13:36:11 | 显示全部楼层
为什么要这么做?不安全。如果一定要做的话,用一个C程序来调脚本,改这个C程序的权限就行了。


  1. #include <unistd.h>

  2. int
  3. main(int argc, char *argv[])
  4. {
  5.   const char *script = "/path/to/your/script.py";
  6.   execv(script, argv);
  7.   return 0;
  8. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-5 18:24:48 | 显示全部楼层
不过是想让python直接beep,而且有的时候会有用的。
回复 支持 反对

使用道具 举报

发表于 2006-12-5 21:39:32 | 显示全部楼层
设置脚本的 s 权限是没有用的,这不仅仅是Python脚本的问题,而是所有脚本的问题。

linux的实现是只对二进制文件如ELF类型有 s 权限,而对以 #! 开头的文本可执行文件忽略 s 权限。这个解释可以查看内核代码的 exec 执行部分。

你的问题应该是调整 /dev/console 让所有人可写,如果不想让所有人可写就只能使用s权限的C程序去嵌套执行,这实际上还是让root去执行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-6 08:50:19 | 显示全部楼层
我只希望/dev/console被一个程序写……
看来只能用C 封装了。

谢谢楼上各位!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表