![](/img/trans.png)
[英]Some Unix commands fail with "<command> not found", when executed using Python Paramiko exec_command
[英]Why do some Unix commands not work when called from inside Python? (command not found)
我经常希望从Python内部执行Unix命令,但我最近发现找不到某些命令。 一个例子是'limit'命令:
$ echo $SHELL
/bin/tcsh
$ limit vmemoryuse 1000m
$ python
Python 2.7.3 (default, Aug 3 2012, 20:09:51)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system("echo $SHELL")
/bin/tcsh
0
>>> os.system("limit vmemoryuse 1000m")
sh: limit: command not found
32512
>>>
另一个例子是'setenv'命令。 为什么这些命令在Python中不起作用? 我尝试过使用'os'和'subprocess'模块但没有成功。 有没有人知道允许我从Python内部成功调用这些命令的另一个模块或方法?
那是因为一些shell命令不是真正的程序,而是内部shell命令。
经典的例子是cd
:如果是外部程序,它将改变新进程的当前目录,而不是shell的目录,因此它不能是外部程序。
粗略地说,有两种类型的内部shell命令:
true
, false
, test
, sleep
... cd
, umask
, setenv
, ulimit
... 第一类中的命令非常特定于shell。 第二类中的命令,不是那么多。
有关详细信息,请参阅相关shell的手册页(例如man bash
)。
如果您想了解特定的命令运行:
$ type -a <command>
类型是一种基础 ,我不知道tcsh中的等价物,但是which
是一个外部程序,所以这个:
$ which -a <command>
将显示您的命令是否作为外部程序存在,但它对shell内部结构一无所知。
如果您需要Python程序中的内部命令(上面的类型2)的功能,则需要使用相关的系统调用。 希望它已经在某些模块中可用。 如果没有,您需要在C中编写自己的包装器。
关于您的特定命令:
os.environ
或os.getenv
, os.putenv
等操作环境( setenv
和getenv
)。 limit
),请查看资源模块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.