aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 11957|回复: 8

通过process.popen执行cmd会卡在findstr窗口

[复制链接]

10

主题

73

回帖

530

积分

三级会员

积分
530
发表于 2017-11-24 09:44:29 | 显示全部楼层 |阅读模式

手动在cmd中执行echo "123456"  | findstr /c:"1" >nil && echo 1 || echo 0
能够得到返回值1,使用process.popen调用cmd,卡在findstr的弹出窗口,窗口标题是findstr /c:"1"
不知道有没有什么好的解决办法?

  1. import process.popen

  2. cmd=/*
  3.         echo "123456"  | findstr /c:"1" >nil && echo 1 || echo 0
  4. */

  5. io.open()
  6. prcs = process.popen("cmd.exe")

  7. prcs.write(cmd)
  8. result = prcs.peekTo(">");
  9. prcs.write('exit\n')
  10. io.print(result)

  11. execute("pause") //按任意键继续
  12. io.close();//关闭控制台
复制代码

10

主题

73

回帖

530

积分

三级会员

积分
530
 楼主| 发表于 2017-11-24 10:06:24 | 显示全部楼层
试了下execute(cmd)是能够正常执行的,不过execute只执行第一行命令,所以需要将所有命令写成一行,稍有不便
  1. import process.popen

  2. cmd=/*
  3. @set str="123456" && echo %str%| findstr.exe /c:"11" >nil && echo 1 || echo 0
  4. */
  5. io.open()

  6. execute(cmd)
  7. execute("pause") //按任意键继续
  8. io.close();//关闭控制台
复制代码

10

主题

73

回帖

530

积分

三级会员

积分
530
 楼主| 发表于 2017-11-24 10:30:26 | 显示全部楼层
使用excute暂时解决了
我这经常1.6,1。7和1.8切换,所以写了个jdk配置脚本,源码如下:
  1. import console;
  2. import fsys;
  3. import fsys.environment;
  4. import table;
  5. import process.popen

  6. JAVA_HOME = /**
  7.         @SETX /M JAVA_HOME "JDKPATH" &&        SET JAVA_HOME="JDKPATH"
  8. **/
  9. ClassPath = /**
  10.         @SETX /M ClassPath ".;JDKPATH\lib;JDKPATH\lib\tools.jar" &&        SET ClassPath=".;JDKPATH\lib;JDKPATH\lib\tools.jar"
  11. **/

  12. path = /**
  13.         @echo %path% | findstr /c:"jdk" >nul || SETX /M Path %"JAVA_HOME"%"\bin;%Path%" && SET Path=%"JAVA_HOME"%"\bin;%Path%"
  14. **/


  15. console.log('jdk环境变量设置!\r\n\r\n')
  16. tab={}
  17. addTable=function(pg){
  18.         fsys.enum(pg+"/Java","jdk1.*",
  19.                         function(dir,filename,fullpath,findData){ //指定触发器
  20.                                 if(!filename){
  21.                                         table.insert(tab,fullpath)
  22.                                 }
  23.                         }
  24.                   );
  25. }
  26. addTable(fsys.environment.expand("%ProgramFiles%"));
  27. addTable(fsys.environment.expand("%ProgramW6432%"));

  28. for(k,v in tab) console.log("",k,v);

  29. var num = console.getNumber('\r\n\r\n输入对应的数值:')
  30. prcs = process.popen("cmd.exe","/max")
  31. if(tonumber(num)<=table.len(tab)){
  32.         //prcs.write(cmd)
  33.         //result = prcs.peekTo(">");
  34.         //prcs.write('exit\n')
  35.         execute(string.replace(JAVA_HOME,"@JDKPATH",tab[num]))
  36.         execute(string.replace(ClassPath,"@JDKPATH",tab[num]))
  37.         execute(path)
  38.         console.box(,,26,4,11,"已完成设置!" )
  39. }else {
  40.         console.log('输入错误!')
  41. }

  42. console.pause()

复制代码

12

主题

646

回帖

4023

积分

荣誉会员

子非魚、安知魚之樂

积分
4023
发表于 2017-11-24 11:56:58 | 显示全部楼层
win库有 getenv() 和 setenv()

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2017-11-24 12:31:01 | 显示全部楼层
即然你已经用process.popen重定向了cmd.exe的管道,
怎么又输入管道命令,这不自相矛盾吗,他当然傻掉了。

可以看看我写的 inet.stat ,如果通过管道得到了命令执行结果,已经捕获取了进程输出,可以直接编程处理字符串了。

另外你要设置JAVA_HOME,添加PATH这些环境变量,直接用 string.setenv,win.addenv 这些函数就可以了,不需要写这么复杂。

10

主题

73

回帖

530

积分

三级会员

积分
530
 楼主| 发表于 2017-11-29 14:58:39 | 显示全部楼层
xauto 发表于 2017-11-24 11:56
win库有 getenv() 和 setenv()

非常感谢!

10

主题

73

回帖

530

积分

三级会员

积分
530
 楼主| 发表于 2017-11-29 15:57:26 | 显示全部楼层
Jacen.He 发表于 2017-11-24 12:31
即然你已经用process.popen重定向了cmd.exe的管道,
怎么又输入管道命令,这不自相矛盾吗,他当然傻掉了。 ...

现在理解process.popen的用法了.
另外试了一下setenv和getenv,当前进程的环境变量设置和获取没问题,
只是没有找到永久生效的参数.

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2017-11-29 16:04:08 | 显示全部楼层
mzky 发表于 2017-11-29 15:57
现在理解process.popen的用法了.
另外试了一下setenv和getenv,当前进程的环境变量设置和获取没问题,
只 ...

一般改当前进程环境变量可以的话,系统变量最好不要去改。
改系统变量需要修改注册表,扩展库里有 environment 可以用。

10

主题

73

回帖

530

积分

三级会员

积分
530
 楼主| 发表于 2017-11-29 16:05:15 | 显示全部楼层
Jacen.He 发表于 2017-11-29 16:04
一般改当前进程环境变量可以的话,系统变量最好不要去改。
改系统变量需要修改注册表,扩展库里有 envir ...

好的,谢谢!
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-9-9 12:49 , Processed in 0.061622 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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