python子进程包装器

pbs的Python项目详细描述


PBS现在已成为sh.
============


PBS将不再受支持。请在此处升级:

http://pypi.python.org/pypi/sh


,并使用以下命令迁移现有代码:

``python
``import sh as pbs
````

**

python函数。pbs通过提供bash(简单的命令调用,简单的管道)的强大功能和灵活性,帮助您在python中编写shell脚本。命令在python中实现。

端口ifconfig
print ifconfig("eth0")
```

这对于
名称中有奇怪字符的程序或不在
您的$path中的程序很有用:

``python
import pbs
ffmpeg=pbs.command("/usr/bin/ffmpeg")
ffmpeg(电影文件)
``

雷普尔默认情况下,这就像一个星型导入(因此所有系统程序都将立即可用为函数):

$>;python pbs.py



**只需像调用函数一样调用程序名:**

``python
/>请注意,这些不是python函数,而是通过解析路径在系统上动态运行二进制
命令,这与bash非常相似。
这样,系统上的所有程序都可以在python中轻松使用


这将转换为命令名,后跟属性名:

``python
from pbs import git

以及(如git、svn、time、sudo等)。
请参阅"烘焙"以了解其高级用法。


uckduckgo.com/-o page.html--silent"
curl("http://duckduckgo.com/",o="page.html",silent=true)


--shell=/bin/bash——没有create home"
adduser("amoffat",system=true,shell="/bin/bash",no_create_home=true)

n
按最大文件对该目录进行排序
打印排序(du(glob("*"),"-sb"),"-rn")

e.
这是通过特殊的"u out"和"u err"关键字参数完成的。可以传递
文件名或文件对象作为参数值。当一个已经
传递现有文件时,文件的内容将被覆盖。

``python
ls(_out="files.list")
ls("不存在",_err="error.txt")
`````

pbs还可以将错误输出流重定向到标准输出流,
使用特殊的关键字argument.



\sudo和with contexts

使用此
的常用命令可能是"sudo"或"fakeroot":

``python
with sudo:
print ls("/root")
````

.
这让命令知道它是从具有上下文的中运行的,因此
它可以正常运行。

``python
with sudo(p=">;",u with=true):
print ls("/root")
```

ue keyword
参数:

`` python

p.wait()
打印"…3秒后"
````



`` python
p=wc(curl("http://github.com/",silent=true,_bg=true),"--bytes")
print"立即打印!"
print"github的字节数:d"%int(p)懒洋洋地完成
```

ound进程是希望直接与终端的默认stdout和stdin交互的进程。换句话说,这些是
进程,您不希望将其输出作为调用的返回值返回。例如,打开一个文本编辑器:

`` python
vim(file_to_edit)
````

这将被阻止,因为pbs将尝试将命令的输出聚合到python,而不向屏幕显示任何内容。
解决方案是"_fg"特殊关键字arg:

`` python
vim(file_to_edit,_fg=true)
````

这将按预期打开vim并让您按预期使用它,所有输入都来自键盘,输出都将显示在屏幕上。
foregro的返回值und进程是一个空字符串。



叮叮声。

`` python
打印哪个("python")"/usr/bin/python"
打印哪个("ls")"/bin/ls"
打印哪个("some_command")none

如果不是,打印哪个("supervisortl"):apt_get("install","supervisor","y")
````

曼德。这与stdlib functools.partial包装类似。一个例子可以说是大量的:

``python
from pbs import ls

print ls"/usr/bin/ls-la"


传递传递到"bake"中的所有参数。
如果将其与pbs import ssh中的属性


``python
access结合在一起,将获得**真正有趣的**在服务器上调用whoami。如果您只运行几个命令,那么这样做很乏味。
iam1=ssh("myserver.com","-p 1393","whoami")


myserver=ssh.bake("myserver.com",p=1393)


打印myserver"/usr/bin/ssh myserver.com-p 1393"

解析为"/usr/bin/ssh myserver.com-p1393 whoami"
iam2=myserver.whoami()

assert(iam1==iam2)true!
```

既然"myserver"可调用表示一个烘焙的ssh命令,那么您就可以轻松地调用服务器上的任何内容:

``python
解析为"/usr/bin/ssh myserver.com-p 1393 tail/var/log/dumb-daemon.log-n 100"
print myserver.tail("/var/log/dumb-daemon.log",n=100)
```


import os
os.environ["test"]="123"
````

捕获特定的返回代码,或通过基类error return code捕获所有错误返回代码


``python
尝试:打印ls("/some/non-existant/folder")
,errorreturncode除外2:
print"文件夹不存在!"
创建_folder()
除了errorreturncode:
打印"未知错误"
退出(1)
````

例如,这将不起作用:

```python
from pbs import du
print du("*"
````


print du(glob("*")
```



do_something()
```

您可以通过"argv"访问整个argparse/optparse友好的命令行参数列表。这是灵活性的建议:

``python
import argparse
parser=argparse.argumentparser(prog="prog")
parser.add_argument("-x",default=3,type=int)
ns=parser.parse_args(argv)
print ns.x
```


处理下划线-短划线转换。例如,如果希望
调用apt get:

``python
apt get("install","mplayer",y=true)
````

,然后再次搜索。如果仍然找不到该命令,则会引发
commandnotfound异常。


command类将程序的完整路径作为字符串:

``python
p27=command(which("python2.7"))
print p27("-h")
````


command wrapper对于不在标准路径中的命令也很有用:

``python
script=command("/tmp/temporary script.sh"
print script()
```

非标准退出代码

通常,如果命令返回的退出代码不是0,PBS会基于该退出代码引发异常
。但是,如果您确定错误代码
是正常的,并且希望在PBS不引发
异常的情况下检索命令的输出,则可以使用"\u ok_code"特殊参数来抑制异常:

``python
output=pbs.ls("dir_存在","dir_不存在",_好的,在上面的例子中,
```

告诉
命令2是"确定"退出代码,因此不要引发异常。

< BR>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用相同的模型、颜色、字体和侦听器创建JTable的副本?   JavaSpring+Thymeleaf:用户时区中的时间   java HTTP请求返回非法状态异常安卓   java xml验证JDK 1.5 JDK 1.6差异   junit如何使用Parasoft从java文件生成测试文件   java使用getSpans方法获取可扩展文件中的所有跨距   javascript无法使用bindingResult设置表单元素   java RCP应用程序活动   获取Java类中泛型字段的类型   java更新查询,从一个依赖于另一个表的表中更改字段   java错误:GWT类型中的方法setBridge(GWTBridge)不适用于参数(GWTBridge)   为什么java/安卓需要在XML元素的开头有一个空格来解析它?   java通用代码,用于将字符串转换为任何所需的类   java如何创建Liferay钩子以扩展购物车portlet的功能   java Selected()方法存在漏洞   java新行附加在我的加密字符串上   使用NaN值的指数平滑的java   使用飞碟和iText发行的java XHTML到PDF   java如何在不使用HTMLDocument的情况下在JTextPane中显示两列文本?