我正在尝试使用python 2.7以编程方式执行此命令:
# prepare the data as a dataframe with boolean values
import pandas as pd
df = pd.DataFrame (
[
[True,True, True],
[True, False,False],
[True, True, True],
[True, False, False],
[True, True, True],
[True, False, True],
[True, True, True],
[False, False, True],
[False, True, True],
[True, False, True],
],
columns=list ('ABC'))
# set up rpy2
from rpy2.robjects import pandas2ri
pandas2ri.activate()
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
arules = importr("arules")
# run apriori
itsets = arules.apriori(df,
parameter = ro.ListVector({"supp": 0.1, "target": "frequent itemsets"}))
# get itemsets as a dataframe
print(arules.DATAFRAME(itsets))
# get quality as a dataframe
print(itsets.slots["quality"])
# get itemsets as a matrix
itemset_as_matrix = ro.r('function(x) as(items(x), "matrix")')
itemset_as_matrix(itsets)
问题是this command一经执行,就会要求用户输入一些参数:
aws configure --profile name_profile
我知道如何在python中执行命令,通常只需完成以下几行:
$ aws configure
AWS Access Key ID [****]: access_key_input
AWS Secret Access Key [****]: secret__key_input
Default region name [us-west-1]: region_optional_input
但是在这种情况下,我不知道如何模拟此过程。我想写类似的东西
def execute_command(command):
try:
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate()
return output, error
except Exception as error:
return None, error
这应该执行before命令,并使用参数回答问题。
先谢谢大家。
答案 0 :(得分:1)
这个问题与AWS CLI的关系比与Python有关的问题更多。配置AWS credentials的简单,非交互方式是使用AWS shared credentials file。
您可以使函数创建这样的共享凭据文件,而不必与命令行进行交互,并确保在完成操作后还清理或删除该文件。
如果您坚持使用Python与AWS CLI交互,则有两种方法。通过快速的Google搜索,我发现了this SO post。根据我自己使用Python编程与命令行交互的经验,我使用过Pexpect。该库基本上可以让您期望某些文本会出现在CLI中,然后您的程序可以将新数据输出到CLI。
答案 1 :(得分:1)
即使使用Pexpect(感谢@ natn2323)解决了问题,我仍然发现,如果您不需要检查动态问题,并且问题的数量和类型始终相同。这也将起作用:
try:
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
output, error = process.communicate(input=b"answer1\nanswer2\n\n")
return output, error
except Exception as error:
return None, error
请注意,对于我的情况(aws配置),最后两个答案(输入“ \ n \ n”的最后部分)为空。
我在Pycharm和使用Pexpect方面存在一些错误,因此最后我将使用此解决方案。