如何使用&&执行shell命令在groovy

时间:2015-09-28 02:16:59

标签: python groovy virtualenv

我想执行以下shell命令

workon foo && python /path/to/bar.py --parm1 /path/p1 --parm2 /path/p2

我试过像这样运行它

    def sout = new StringBuffer(), serr = new StringBuffer()
    def proc = ["/bin/zsh","-c"," workon foo", "&&", "python", "/path/to/bar.py", "--parm1", "/path/p1", "--parm2", "/path/p2"].execute()
    proc.consumeProcessOutput(sout, serr)
    proc.waitForOrKill(1000)
    println "out> $sout err> $serr"

但我一直收到错误:

out>  err> zsh:1: command not found: workon

我可以从终端执行此命令

1 个答案:

答案 0 :(得分:2)

正如@donkopotamus建议,workon在调用zsh -c时,zsh可能不在您的路径中,也不会设置(通过环境初始化)。您可能需要一个"登录shell"这样做 - 但请注意,我不会使用或了解zsh -l -c COMMAND:)

尝试运行zsh

此外,您使用-c调用&&的方式,它只能处理一个命令。其他所有内容都将被视为该命令的参数。

要使用proc,您必须将此内容分配给["/bin/zsh","-lc", "workon foo && python /path/to/bar.py ..."]

-c

请注意@TargetApi(Build.VERSION_CODES.JELLY_BEAN) public void PushNotification() { NotificationManager nm = (NotificationManager)context.getSystemService(NOTIFICATION_SERVICE); Notification.Builder builder = new Notification.Builder(context); Intent notificationIntent = new Intent(context, MainActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(context,0,notificationIntent,0); //set builder.setContentIntent(contentIntent); builder.setSmallIcon(R.drawable.cal_icon); builder.setContentText("Contents"); builder.setContentTitle("title"); builder.setAutoCancel(true); builder.setDefaults(Notification.DEFAULT_ALL); Notification notification = builder.build(); nm.notify((int)System.currentTimeMillis(),notification); } 的参数是一个字符串。