我想从python运行cygwin并执行cygwin命令。
我正在使用Windows,所以我想在cygwin而不是cmd中运行命令。我使用的是Python 3.6.1。
我只想知道如何运行基本命令,以便我可以像ls
那样在那里工作。我试过了:
subprocess.call("E:/cygwin/bin/bash.exe", "ls")
(类似这样,但不起作用)/usr/bin/bash: line 1: ls: command not found
错误我能够做到以下几点:
打开cygwin:subprocess.call("E:/cygwin/bin/bash.exe")
(在Windows cmd上运行命令:subprocess.call("dir", shell=True)
)
这种格式是否可行? 当我运行下一个python命令时,cygwin会自动关闭,还是我需要在此之前退出?
我对此比较陌生。
答案 0 :(得分:2)
maxlag : integer
the Granger causality test results are calculated for all lags up to maxlag
答案 1 :(得分:0)
from subprocess import Popen, PIPE, STDOUT
p = Popen(['E:/cygwin/bin/bash.exe', '-c', '. /etc/profile; ls'],
stdout=PIPE, stderr=STDOUT)
print(p.communicate()[0]))
这将打开bash,执行-c
之后提供的命令并退出。
您需要前置. /etc/profile;
,因为bash是在非交互模式下启动的,因此不会初始化任何环境变量,您需要自己获取它们。
如果您通过用户文件夹(如我所拥有)中的 babun 软件安装了cygwin,则代码如下所示:
from subprocess import Popen, PIPE, STDOUT
from os.path import expandvars
p = Popen([expandvars('%userprofile%/.babun/cygwin/bin/bash.exe'), '-c', '. /etc/profile; ls'],
stdout=PIPE, stderr=STDOUT)
print(p.communicate()[0])