预言online用易语言openprocesss无法打开进程怎么办

博客访问: 4145404
博文数量: 677
博客积分: 2150
博客等级: 上尉
技术积分: 11885
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Python/Ruby
二、应用实例解析
2.1 subprocess模块的使用
1. subprocess.call
>>> subprocess.call(["ls", "-l"]) &
>>> subprocess.call("exit 1", shell=True) &
2. 调用系统中cmd命令,显示命令执行的结果:
x=subprocess.check_output(["echo", "Hello World!"],shell=True) &
print(x) &
"Hello World!" &
3. 在python中显示文件内容:
y=subprocess.check_output(["type", "app2.cpp"],shell=True) &
print(y) &
4. 查看ipconfig -all命令的输出,并将将输出保存到文件tmp.log中:
handle = open(r'd:\tmp.log','wt') &
subprocess.Popen(['ipconfig','-all'], stdout=handle)&
5. 查看网络设置ipconfig -all,保存到变量中
output = subprocess.Popen(['ipconfig','-all'], stdout=subprocess.PIPE,shell=True) &
municate() & & & & & & #取出output中的字符串 &
#communicate() returns a tuple (stdoutdata, stderrdata). &
print(oc[0]) #打印网络信息 &
Windows IP Configuration &
& & & & Host Name . . . . . &
6. 如果想频繁地和子线程通信,那么不能使用communicate();
因为communicate通信一次之后即关闭了管道.这时可以试试下面的方法:
p= subprocess.Popen(["wc"], stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True) &
p.stdin.write('your command') &
p.stdin.flush() &
#......do something &&
& & #......do something &
& & p.stdout.readline() &
& & #......do something &
& & print('IOError') &
#......do something more &
p.stdin.write('your other command') &
p.stdin.flush() &
#......do something more&
2.2 subprocess子进程和管道进行交互
其实在python中,和shell脚本,其他程序交互的方式有很多,比如:
os.system(cmd),os.system只是执行一个shell命令,不能输入、且无返回
os.open(cmd),可以交互,但是是一次性的,调用都少次都会创建和销毁多少次进程,性能太差
1. 一个简单的例子,调用ls命令,两者之间是没有交互的:
import subprocess &
p = subprocess.Popen('ls')&
2. 在程序中获取输出的例子:
import subprocess &
p = subprocess.Popen('ls',stdout=subprocess.PIPE) &
print p.stdout.readlines()&
3. 有输入,有输出的例子,
父进程发送'say hi',子进程输出 test say hi,父进程获取输出并打印
#test1.py &
import sys &
line = sys.stdin.readline() &
print 'test',line &
from subprocess import * &
p =Popen('./test1.py',stdin=PIPE,stdout=PIPE) &
p.stdin.write('say hi/n') &
print p.stdout.readline() &
test say hi &
4. 连续输入和输出的例子
import sys &
while True: &
& & & & line = sys.stdin.readline() &
& & & & if not line:break &
& & & & sys.stdout.write(line) &
& & & & sys.stdout.flush() &
import sys &
from subprocess import * &
proc = Popen('./test.py',stdin=PIPE,stdout=PIPE,shell=True) &
for line in sys.stdin: &
& & & & proc.stdin.write(line) &
& & & & proc.stdin.flush() &
& & & & output = proc.stdout.readline() &
& & & & sys.stdout.write(output)&
注意,run.py的flush和test.py中的flush,要记得清空缓冲区,否则程序得不到正确的输入和输出
2.3 python 实时获取子进程输出
import subprocess &
def main(): &
& & process1 = subprocess.Popen("python &-u sub.py", shell=False, stdout = subprocess.PIPE, stderr=subprocess.STDOUT)&
& & #municate()[0] &
& & while True: &
& & & & line = process1.stdout.readline() &
& & & & if not line: &
& & & & & & break &
& & & & print line &
if __name__ == '__main__': &
& & main()&
2. 方法二:
import subprocess &
import time &
p = subprocess.Popen('ping 127.0.0.1 -n 10', stdout=subprocess.PIPE) &
while p.poll() == None: &
& & print p.stdout.readline() &
& & time.sleep(1) &
print p.stdout.read() & &&
print 'returen code:', p.returncode &
http://blog.csdn.net/junshao90/article/details/8215751
http://blog.csdn.net/b_h_l/article/details/
http://blog.csdn.net/marising/article/details/6551692
阅读(11743) | 评论(0) | 转发(2) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。如何使用OpenProcess(PROCESS_ALL_ACCESS, False, pid)打开一个进程_百度知道如何检测自身进程是否被其他进程OpenProcess_百度知道mongodb服务无法启动,但是直接启动数据库可以。 - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
mkdir xxx后mongod --dbpath xxx初始化了一下,然后在另外的一个命令行中运行mongo显示已经链接。然后,更改mongo.conf个dbpath后,service启动,报错。我更改了xxx文件夹的权限后,仍然启动报错。已经删除过mongod.lock文件。现在,mongod命令能启动,而servce却不能启动,报错如下:
命令行中报错:ERROR: child process failed, exited with error number 45
log中:couldn’t open /var/lib/mongo/xxx/local.ns errno:13 Permission denied
error couldn’t open file /var/lib/mongo/xxx/local.ns terminating
求解答。是有线程没有关闭吗?
/var/lib/mongo/xxx/local.ns 这个文件是什么情况, ls -l 是什么?
我以为local.ns是数据库初始化自动生成的。你说的“ls -l是什么”是想表达什么意思?还有一个疑问,有时候,use一个新数据库,会生成一个同名的文件夹,有时候不会,为什么呢?
ls -l 是看具体的文件权限, 看一下也许会多看到点
ns 文件问题不清楚
不知道对你有没有帮助http://www.9958.pw/post/mongodb_12596
我直接mongod运行是可以的,没有报错~
有可能是这个原因,晚上回家试一下~
我试了一下,如果只有权限还是会报错,将文件夹的所有者设置为mongodb后,能正常启动服务。我感觉是service启动,mongodb需要对这个文件夹和里面的文件有读写权限,而且文件夹和里面文件的所有者需要是mongodb。是这样吗?
具体看吧. 我启动 MongoDB 都是用 root 的, 文件夹全是 root 所有
对的,我也是用root。表现就是:在数据库文件夹的所有者是root的情况下,直接用mongod命令可以启动数据库,而用service命令是不能启动的。我觉得读一下service相关的机制,就应该能了解具体原因了。
你是说 service 不是 root 权限跑的? 期待你看的结果 :)
1、cmd.exe 要以管理员身份运行
2、–dbpath 参数结尾不要带&/&
3、–logpath 参数是文件
mongod --logpath D:\mongodb-win32-x86_64-2.4.5\logs --logappend --dbpath D:\mongodb-win32-x86_64-2.4.5\data\db --directoryperdb --serviceName mongoDB --install
不确定,只试验的表现让我这样联想。至少service和直mongod存在一些权限方面的差异。
嗯,学习了。我觉得,我的问题的原因应该在于service和mongod之间的差异。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的:转载时请以超链接形式标明文章原始出处和作者信息及本声明
&&&&& 在中曾使用了OpenProcess来获得进程的句柄,今天就详细介绍下这个函数。
函数原型:HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId)
参数说明:1、dwDesiredAccess:想拥有的该进程访问权限PROCESS_ALL_ACCESS& //所有能获得的权限PROCESS_CREATE_PROCESS& //需要创建一个进程PROCESS_CREATE_THREAD&& //需要创建一个线程PROCESS_DUP_HANDLE&&&&& //重复使用DuplicateHandle句柄PROCESS_QUERY_INFORMATION&& //获得进程信息的权限,如它的退出代码、优先级PROCESS_QUERY_LIMITED_INFORMATION& /*获得某些信息的权限,如果获得了PROCESS_QUERY_INFORMATION,也拥有PROCESS_QUERY_LIMITED_INFORMATION权限*/PROCESS_SET_INFORMATION&&& //设置某些信息的权限,如进程优先级PROCESS_SET_QUOTA&&&&&&&&& //设置内存限制的权限,使用SetProcessWorkingSetSizePROCESS_SUSPEND_RESUME&&&& //暂停或恢复进程的权限PROCESS_TERMINATE&&&&&&&&& //终止一个进程的权限,使用PROCESS_VM_OPERATION&&&&&& //操作进程内存空间的权限(可用VirtualProtectEx和WriteProcessMemory) PROCESS_VM_READ&&&&&&&&&&& //读取进程内存空间的权限,可使用ReadProcessMemoryPROCESS_VM_WRITE&&&&&&&&&& //读取进程内存空间的权限,可使用WriteProcessMemorySYNCHRONIZE&&&&&&&&&&&&&&& //等待进程终止
2、bInheritHandle:表示所得到的进程句柄是否可以被继承
3、dwProcessId:被打开进程的PID
返回值:如果函数调用成功将返回一个进程句柄值,否则将返回NULL
注意:在使用完所获得的进程句柄后一定要调用CloseHandle(handle)来关闭进程的句柄。
&&&&& 使用的例子在前面的文章中已经写出了。在使用此函数时会发现不能成功获得有些系统进程的句柄,原因是没有权限。解决办法是在调用此函数前让我们的进程得到SeDebugPrivilege权限。
历史上的今天:
最近不好玩儿啊:::CJRLLH:大灰狼::ztms::西贝山人:sheshou:}

我要回帖

更多关于 openprocess 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信