我需要使用conda环境来执行python文件(因为缺少服务器管理员设置的权限和约束)。因此,目前我执行以下操作来激活环境:
subprocess.check_output('source activate rgi_run', shell=True)
然后使用shell = True使用其他suprocess调用运行我的脚本。
但是,我只读了关于使用shell = True
的“否定”内容,特别是安全原因(例如:Actual meaning of 'shell=True' in subprocess)。所以我想知道是否还有其他选择可以做到这一点,如果没有甚至是安全原因在私人内部服务器上运行它?
答案 0 :(得分:0)
还有两个选择:1是一种解决方法,2是conda 4.6中可用的最终解决方案。
conda包装器 Guilherme Melo在conda环境中为python可执行文件创建了包装。如果您在IDE中将其设置为python解释器,例如PyCharm,它将激活从其调用的conda环境,然后调用python解释器。 在“创建conda包装器”部分下查看此处: https://pypi.org/project/exec-wrappers/
conda运行
在a standard and fast way to execute a command inside an environment的conda github页面上的长时间讨论导致了新命令的实现(实际上是重新调用,因为它以前可用):
public void goToNext(EditText currentFocus) {
if (currentFocus == otpOne) {
otpTwo.requestFocus();
return;
}
if (currentFocus == otpTwo) {
otpThree.requestFocus();
return;
}
if (currentFocus == otpThree) {
otpFour.requestFocus();
return;
}
if (currentFocus == otpFour) {
return;
}
}
public void goToPrevious(EditText currentFocus) {
if (currentFocus == otpOne) {
return;
}
if (currentFocus == otpTwo) {
otpOne.requestFocus();
return;
}
if (currentFocus == otpThree) {
otpTwo.requestFocus();
return;
}
if (currentFocus == otpFour) {
otpThree.requestFocus();
return;
}
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.i("ENOUGH", "onKey: " + keyCode + " " + event.getAction() + " " + KeyEvent.KEYCODE_DEL);
if (event.getAction() == KeyEvent.ACTION_DOWN) {
EditText currentFocus = (EditText) getCurrentFocus();
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DEL: {
if (currentFocus.getText().length() > 0) {
currentFocus.setText(null);
} else {
goToPrevious(currentFocus);
EditText focused = (EditText) getCurrentFocus();
focused.setText(null);
}
return false;
}
case KeyEvent.KEYCODE_FORWARD:
return true;
case KeyEvent.KEYCODE_BACK:
return true;
case KeyEvent.KEYCODE_ENTER:
return true;
default: {
currentFocus.setText("");
goToNext(currentFocus);
}
}
}
return false;
}
它在issue #7320中有描述,有望在2018年10月在conda-4.6中发布!