Python子进程创建conda环境可能没有shell = true?

时间:2017-10-10 20:48:12

标签: linux shell security subprocess

我需要使用conda环境来执行python文件(因为缺少服务器管理员设置的权限和约束)。因此,目前我执行以下操作来激活环境:

subprocess.check_output('source activate rgi_run', shell=True)

然后使用shell = True使用其他suprocess调用运行我的脚本。

但是,我只读了关于使用shell = True的“否定”内容,特别是安全原因(例如:Actual meaning of 'shell=True' in subprocess)。所以我想知道是否还有其他选择可以做到这一点,如果没有甚至是安全原因在私人内部服务器上运行它?

1 个答案:

答案 0 :(得分:0)

还有两个选择:1是一种解决方法,2是conda 4.6中可用的最终解决方案。

  1. conda包装器 Guilherme Melo在conda环境中为python可执行文件创建了包装。如果您在IDE中将其设置为python解释器,例如PyCharm,它将激活从其调用的conda环境,然后调用python解释器。 在“创建conda包装器”部分下查看此处: https://pypi.org/project/exec-wrappers/

  2. 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中发布!