
したがって、npmパッケージがインストールされていることを確認する必要がある次のコードがあります。
def is_installed(name, as_global=True):
# Returns whether NPM package is installed.
s = shell(_get_npm_command("ls -p --depth 0", as_global))
match = re.search(r'\b%s\b' % (name), s['stdout'])
if match:
return True
return False
シェル関数は subprocess.Popen() を囲むラッパーです。
def shell(c, stdin=None, env={}):
# Simplified wrapper for shell calls to subprocess.Popen()
environ = os.environ
environ["LC_ALL"] = "C"
for x in env:
environ[x] = env[x]
if not "HOME" in environ:
environ["HOME"] = "/root"
p = subprocess.Popen(shlex.split(c),
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
env=environ)
data = p.communicate(stdin)
return {"code": p.returncode, "stdout": data[0],
"stderr": data[1]}
次のようにget_npm_commandを使用してください。
def _get_npm_command(command, as_global, path=None):
# returns npm command
if as_global:
return _get_global_npm_command(command)
else:
return _get_local_npm_command(command, path)
def _get_global_npm_command(command):
# returns global npm command
os.chdir(NPM_PATH)
return "gksu -u npm 'npm " + command + " -g'"
def _get_local_npm_command(command, install_path):
# returns local npm command
if install_path:
os.chdir(install_path)
return "npm " + command + " "
ご覧のとおり、最終コマンドは次のとおりです。
gksu -u npm npm ls -p --depth 0
つまり、しばらく前にnpmでroot権限を使用しないことをお勧めしたので、グローバルnpmパッケージをインストールするためにnpmというユーザーを作成しました。彼らは心を変えますが、誰かが提案したオンラインで見つけた解決策に固執します。
とにかく、gksuはこのコマンドのパスワードを求めるメッセージを表示しますが、npmにはパスワードがないため、パスワードを要求せずにこのコマンドを実行できるようにしたいです。
私は以下を試しました:
/etc/sudoers.d/arkos.sudo
npm ALL=(ALL) NOPASSWD: /usr/bin/npm
..しかし、あまり効果はないようです。